zepor

二进制旅程


tea算法

<p>[TOC]</p> <h1>🌓过程分析</h1> <p>TEA是一种分组加密算法,它使用64位的明文和128位的密钥,使用 Feistel 分组加密框架,建议迭代次数为32轮,该算法使用了一个常数 δ(0×9E3779B9) 作为倍数,它来源于黄金比率,以保证每一轮加密都不相同</p> <p>TEA主要采用的就是异或和加法,我们看一下实现的伪代码</p> <pre><code>void Encrypt(long* v, long* k) { unsigned long x = v[0], y = v[1], sum = 0, delta = 0x9e3779b9, /* 密钥调度常数 */ n = 32 while(n--&gt;0) { sum += delta x += ((y&lt;&lt;4)+k[0])^(y+sum)^((y&gt;&gt;5)+k[1]) y += ((x&lt;&lt;4)+k[2])^(x+sum)^((x&gt;&gt;5)+k[3]) } v[0] = x v[1] = y } </code></pre> <p>举个例子来看具体过程,就拿“1,2”来说 </p> <pre><code>x += ((2&lt;&lt;4)+1)^(2+2654435769)^((2&gt;&gt;5)+2) =&gt; 2654435737 y += ((2654435737&lt;&lt;4)+3)^(2654435737+2654435769)^((2654435737&gt;&gt;5)+4) =&gt; 38049206547 </code></pre> <p>就拿第一轮加密来说,按道理是可以逆向回原本的数据的,逆向操作为</p> <pre><code>x = 2654435737 y = 38049206547 y -= ((2654435737&lt;&lt;4)+3)^(2654435737+2654435769)^((2654435737&gt;&gt;5)+4) =&gt; 2 x -= ((2&lt;&lt;4)+1)^(2+2654435769)^((2&gt;&gt;5)+2) =&gt; 1 </code></pre> <p>计算器一算就出来了,所以可以很容易得到逆向算法为 </p> <p>将sum加到32轮的值,然后进行异或结果进行减去即可得到上一轮的结果,接着循环32轮即可得到最初的值 </p> <p>解密伪代码为 </p> <pre><code>void Decrypt(long *v, long *k) { unsigned long n = 32, sum, x = v[0], z = v[1], delta = 0x9e3779b9 sum = delta&lt;&lt;5 /* 相当于sum加32轮 */ while(n--&gt;0) { y -= ((x&lt;&lt;4)+k[2])^(x+sum)^((x&gt;&gt;5)+k[3]) x -= ((y&lt;&lt;4)+k[0])^(y+sum)^((y&gt;&gt;5)+k[1]) sum -= delta } v[0] = x v[1] = y } </code></pre> <h1>🌓代码实现</h1> <h2>🌙Python</h2> <pre><code class="language-python">def encrypt(v, k): x = v[0] y = v[1] sum = 0 delta = 0x9e3779b9 for i in range(32): sum += delta x += ((y&lt;&lt;4)+k[0])^(y+sum)^((y&gt;&gt;5)+k[1]) y += ((x&lt;&lt;4)+k[2])^(x+sum)^((x&gt;&gt;5)+k[3]) return [x, y] def decrypt(v, k): x = v[0] y = v[1] delta = 0x9e3779b9 sum = delta&lt;&lt;5 for i in range(32): y -= ((x&lt;&lt;4)+k[2])^(x+sum)^((x&gt;&gt;5)+k[3]) x -= ((y&lt;&lt;4)+k[0])^(y+sum)^((y&gt;&gt;5)+k[1]) sum -= delta return [x, y] v = [1, 2] k = [1, 2, 3, 4] v = encrypt(v, k) print(v) v = decrypt(v, k) print(v) </code></pre> <p><img src="https://pic.imgdb.cn/item/637711f416f2c2beb11198e6.png" alt="" /> </p> <h1>🌓参考文章</h1> <p><a href="https://www.anquanke.com/post/id/224198">https://www.anquanke.com/post/id/224198</a></p>

页面列表

ITEM_HTML