一个32位版本的TEA算法

时间:2017-01-05 20:51:48

标签: algorithm encryption

我需要一系列随机的独特字母数字序列号,并决定使用TEA(Tiny Encryption Algorithm),因为它快速,优雅,高效。但是,我只发现64位实现会产生太长的数字:32位数将是更好的选择。我想使用32位版本的TEA,但它不太可能存在。

我的问题当然是,我不知道它是如何工作的 - 如何这样一个错综复杂的操作序列产生一个代码,可以输入反向算法来重新获得原始代码。当然,这很有吸引力,但在这个阶段我会找到一个快速的答案而不是所需的见解。

对于那些感兴趣的人,加密/解密算法是:

while(n-->0) {
    sum += delta;
    y += (z << 4)+a ^ z+sum ^ (z >> 5)+b;
    z += (y << 4)+c ^ y+sum ^ (y >> 5)+d;
}

while(n-->0) {
    z -= (y << 4)+c ^ y+sum ^ (y >> 5)+d;
    y -= (z << 4)+a ^ z+sum ^ (z >> 5)+b;
    sum -= delta;
}

我写了一个快速黑客,打印出前十个数字,所以它正在工作(很高兴发布,如果有人感兴趣 - 60行),但如果有人可以指出我是一个32位版本或解释其操作的魔力我将永远感激。

1 个答案:

答案 0 :(得分:3)

在每轮加密中:

  1. sum+=delta。这可以通过sum-=delta
  2. 轻松撤消
  3. y+=f(z,sum),即您添加到y的内容仅为zsum的函数。由于zsum未更改,因此可以通过sum-=f(z,sum)
  4. 轻松撤消
  5. z+=g(y,sum)。您添加到z的内容仅限于ysum。由于ysum未更改,因此可以通过z-=g(y,sum)
  6. 轻松撤消

    这种确保密码可逆的简单方法显然受到许多现代分组密码中使用的Feistel结构的启发:https://en.wikipedia.org/wiki/Feistel_cipher