TEA原理
TEA是一种分组加密算法,使用64位的密文分组和128位的密钥,它使用Feistel分组加密框架,需要进行 64 轮迭代,尽管作者认为 32 轮已经足够了。该算法使用delta作为倍数,以保证每一轮加密都不相同,TEA中定义为0x9e3779b9

加密函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| void Encrypt(long* EntryData, long* Key) { unsigned long x = EntryData[0]; unsigned long y = EntryData[1]; unsigned long sum = 0; unsigned long delta = 0x9E3779B9; for (int i = 0; i < 32; i++) { sum += delta; x += ((y << 4) + Key[0]) ^ (y + sum) ^ ((y >> 5) + Key[1]); y += ((x << 4) + Key[2]) ^ (x + sum) ^ ((x >> 5) + Key[3]); } EntryData[0] = x; EntryData[1] = y; }
|
解密函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| void Decrypt(long* EntryData, long* Key) { unsigned long x = EntryData[0]; unsigned long y = EntryData[1]; unsigned long sum = 0; unsigned long delta = 0x9E3779B9; sum = delta << 5; for (int i = 0; i < 32; i++) {
y -= ((x << 4) + Key[2]) ^ (x + sum) ^ ((x >> 5) + Key[3]); x -= ((y << 4) + Key[0]) ^ (y + sum) ^ ((y >> 5) + Key[1]); sum -= delta; } EntryData[0] = x; EntryData[1] = y; }
|
TEA逆向
tea的特征为delta和16字节的密钥,有些魔改的tea会改变delta的值
XTEA原理
TEA 算法被发现存在缺陷,作为回应,设计者提出了一个 TEA 的升级版本——XTEA(有时也被称为”tean”)。XTEA 跟 TEA 使用了相同的简单运算,但它采用了截然不同的顺序,为了阻止密钥表攻击,四个子密钥(在加密过程中,原 128 位的密钥被拆分为 4 个 32 位的子密钥)采用了一种不太正规的方式进行混合,但速度更慢了。
XXTEA
XXTEA是一个非平衡Feistel网络分组密码,在可变长度块上运行,这些块是32位大小的任意倍数(最小64位),使用128位密钥, 是目前TEA系列中最安全的算法,但性能较上两种有所降低。