请输入您要查询的百科知识:

 

词条 TEA加密算法
释义

TEA算法由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994年发明[3]。它是一种分组密码算法,其明文密文块为64比特,密钥长度为128比特。TEA算法利用不断增加的Delta(黄金分割率)值作为变化,使得每轮的加密是不同,该加密算法的迭代次数可以改变,建议的迭代次数为32轮。

代码如下:

void qq_encipher(unsigned long *const plain, const unsigned long *const key, unsigned long *const crypt)

//参数为8字节的明文输入和16字节的密钥,输出8字节密文

{

unsigned long left = plain[0],right = plain[1],

a = key[0], b = key[1],

c = key[2], d = key[3],

n = 32, sum = 0,

delta = 0x9E3779B9;

// 明文输入被分为左右两部分,密钥分为四部分存入寄存器,n表示加密轮数推荐32。Delta为一常数。

while (n-- > 0) {

sum += delta;

left += ((right << 4) + a) ^ (right + sum) ^ ((right >> 5) + b);

right += ((left << 4) + c) ^ (left + sum) ^ ((left >> 5) + d);

}

crypt[0] = left ;

crypt[1] = right ;

}

虽然TEA算法比 DES(Data Encryption Standard) 要简单得多, 但有很强的抗差分分析能力,加密速度也比 DES 快得多,而且对 64 位数据加密的密钥长达 128 位,安全性相当好。其可靠性是通过加密轮数而不是算法的复杂度来保证的。从中可以看到TEA 算法主要运用了移位和异或运算。密钥在加密过程中始终不变。QQTEA 算法建立在标准 TEA算法的基础上,使用16轮的加密(这是最低限,推荐应该是32轮)。QQ在使用这个算法的时候,由于需要加密不定长的数据,所以使用了一些常规的填充办法和交织算法。

1 填充算法

如果明文本身的长度不是8的倍数,那么还要进行填充以使其成为8的倍数。以字节为单位,令N=原始字符串+10+填充字节数n,则N应该是8的倍数。

具体的填充方法:第一个字节为:(random()&0xf8)|n,随后填充(n+2)个字节random()&0xff ,后面接原始数据,最后填充7 个字节0x00 。

因为使用了不同的随机数,所以填充的结果使得即使对于相同的明文,密文的结果也会不同。

2 交织算法

消息被分为多个加密单元,每一个加密单元都是8字节,使用TEA进行加密,加密结果与下一个加密单元做异或运算后再作为待加密的明文。

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/3/24 1:18:45