介绍XXTEA加密算法及其C实现
“微型加密算法(TEA)及其相关变种(XTEA,Block TEA,XXTEA)都是分组加密算法,它们很容易被描述,实现也很简单(典型的⼏⾏代码)。
TEA 算法最初是由剑桥计算机实验室的 David Wheeler 和 Roger Needham 在 1994 年设计的。该算法使⽤ 128 位的密钥为 64 位的信息块进⾏加密,它需要进⾏ 64 轮迭代。该算法使⽤了⼀个神秘常数δ作为倍数,它来源于黄⾦⽐率,以保证每⼀轮加密都不相同。但δ的精确值似乎并不重要,这⾥ TEA 把它定义为δ=「(√5 - 1)231」(也就是程序中的 0×9E3779B9 )。”
其实,TEA跟我们的关系⾮常密切,因为QQ就是使⽤16轮迭代的TEA算法。
XXTEA是其最新的变种,于1998年提出。⽬前还没有⼈找到对其进⾏攻击的⽅法,是对前⾯⼀些变种的改进。XXTEA 算法很安全,⽽且⾮常快速,⾮常适合应⽤于 Web 开发中。
下⾯是作者给出的该算法的C实现:
#define MX (z>>5^y3^z 1) {
q = 6 + 52/n;
while (q-- > 0) {
sum += DELTA;
e = (sum >> 2) & 3;
for (p=0; p
y = v;
z = v += MX;
return 0 ;
} else if (n < -1) {
n = -n;
q = 6 + 52/n;
sum = q*DELTA ;
while (sum != 0) {
e = (sum >> 2) & 3;
for (p=n-1; p>0; p--) z = v, y = v -= MX;
z = v;
y = v -= MX;
sum -= DELTA;
return 0;
return 1;
teab will encode or decode n words as a single block where n > 1
v is the n word data vector
k is the 4 word key
n is negative for decoding
if n is zero result is 1 and no coding or decoding takes place, otherwise the result is zero
assumes 32 bit ‘long’ and same endian coding and decoding
这是wikipedia⾥的说明,讲得⽐较明⽩了。
最核⼼的是要明⽩:XXTEA算法使⽤128bit的密钥对以32bit为单位的信息块进⾏加密。
这段介绍⾥的'word’这个词让我很费了⼀番周折。我开始以为是“字”,也就是2byte,16bit。但是在我耗费了不少时间进⾏测试和实验后,可以确定,word在这⾥不是⼀个单位,⼤概是要翻译成“组元”之类的词,其实就是后⾯说的⼀个32bit的long类型。
搞清楚这个,别的就没什么了。刚才那段代码:
long btea(long* v, long n, long* k)
v是要加密的组元的起始地址,以32bit为单位,这⾥⽤long来实现。
n是要加密的组元个数,正数是加密,负数是解密。
k是密钥的起始地址,长度为4个组元,4*32=128bit。
返回值为0或1(对应n=0,没有计算)。
加密的结果会直接写回到v中。
XXTEA的计算是空间相关的,也就是说,在⼀个组元中,4个字节是不能断章取义的,即密⽂的⼀部分,并不能还原成明⽂的⼀部分。
所以,当数据不能被4个字节整除时,要做好字节的填充和对其等辅助⼯作。










