zepor

二进制旅程


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 &lt; num_rounds; i++) { v0 += (((v1 &lt;&lt; 4) ^ (v1 &gt;&gt; 5)) + v1) ^ (sum + key[sum &amp; 3]); sum += delta; v1 += (((v0 &lt;&lt; 4) ^ (v0 &gt;&gt; 5)) + v0) ^ (sum + key[(sum&gt;&gt;11) &amp; 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 &lt; num_rounds; i++) { v1 -= (((v0 &lt;&lt; 4) ^ (v0 &gt;&gt; 5)) + v0) ^ (sum + key[(sum&gt;&gt;11) &amp; 3]); sum -= delta; v0 -= (((v1 &lt;&lt; 4) ^ (v1 &gt;&gt; 5)) + v1) ^ (sum + key[sum &amp; 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>

页面列表

ITEM_HTML