我正在完成Stroustrup的“编程:使用C ++的原理和实践”练习。在第25章中,他介绍了Tiny加密算法(TEA)。他和主持一些论文的网站声称它没有被破坏,并且考虑到代码有多么简短,似乎“真是太好了!”
注意我必须将long
变量更改为int
变量,因为位移设计用于sizeof(var) = 4
OS X实现的长度为8字节类型,因此如果没有此更改,Stroustrup的代码将无效。
任何人都可以推荐其他简单实施的改进,以便在OS X上运行TEA,提高效率和/或提高安全性吗?
void encipher(
const unsigned int* const v,
unsigned int* const w,
const unsigned int* const k
)
{
unsigned int y = v[0];
unsigned int z = v[1];
unsigned int sum = 0;
unsigned int delta = 0x9E3779B9;
unsigned int n = 32;
while(n-- > 0) {
y += (z << 4 ^ z >> 5) + z ^ sum + k[sum & 3];
sum += delta;
z += (y << 4 ^ y >> 5) + y ^ sum + k[sum>>11 & 3];
}
w[0]=y;
w[1]=z;
}
答案 0 :(得分:1)
Wikipedia(来吧,男人,谷歌!)
TEA有一些弱点。最值得注意的是,它受到等效密钥的影响 - 每个密钥相当于另外三个密钥,这意味着有效密钥大小仅为126位。结果,TEA作为加密散列函数特别糟糕。这种弱点导致了一种攻击微软Xbox游戏机的方法,其中密码被用作哈希函数。 TEA也容易受到相关密钥攻击的影响,该攻击在相关密钥对下需要2 ^ 23个选择的明文,具有2 ^ 32的时间复杂度。由于这些弱点,设计了XTEA密码。