xtea算法
<p>[TOC]</p>
<h1>🌓过程分析</h1>
<p>XTEA是TEA算法的进阶版,在TEA的基础上添加了更多的密钥表,移位和异或操作等等,但也就是添加了一些内容,基本的加密思维都没变化</p>
<p>加密伪代码为</p>
<pre><code class="language-cpp">void encipher(unsigned int num_rounds, uint32_t v[2], uint32_t k[4])
{
uint32_t v0 = v[0], v1 = v[1],
sum = 0,
delta = 0x9E3779B9
for(i = 0; i < num_rounds; i++)
{
v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
sum += delta;
v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);
}
v[0]=v0; v[1]=v1;
}
</code></pre>
<p>按照TEA算法,逆向方法为</p>
<p>将sum加到num_rounds轮的值,然后进行异或结果进行减去即可得到上一轮的结果,接着循环num_rounds轮即可得到最初的值</p>
<p>解密伪代码为</p>
<pre><code class="language-cpp">void decipher(unsigned int num_rounds, uint32_t v[2], uint32_t key[4])
{
uint32_t v0 = v[0], v1 = v[1],
delta = 0x9E3779B9,
sum = delta * num_rounds
for(i = 0; i < num_rounds; i++)
{
v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);
sum -= delta;
v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
}
v[0]=v0; v[1]=v1;
}
</code></pre>
<h1>🌓参考文章</h1>
<p><a href="https://www.anquanke.com/post/id/224198"><a href="https://www.anquanke.com/post/id/224198">https://www.anquanke.com/post/id/224198</a></a></p>