基本介紹
- 中文名:TEA加密算法
- 發現人:David Wheeler和Roger Needham
- 時間:1994
- 類型:分組密碼算法
內容,歷史,套用,
內容
代碼如下:
void qq_encipher(unsigned long *const plain, const unsigned long *const key, unsigned long *const crypt)
{
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 ;
}
void decrypt(unsigned long *v, unsigned long *k) {
unsigned long y=v[0], z=v[1], sum=0xC6EF3720, i; /* set up */
unsigned long delta=0x9e3779b9; /* a key schedule constant */
unsigned long a=k[0], b=k[1], c=k[2], d=k[3]; /* cache key */
for(i=0; i<32; i++){ /* basic cycle start */
z -= ((y<<4) + c) ^ (y + sum) ^ ((y>>5) + d);
y -= ((z<<4) + a) ^ (z + sum) ^ ((z>>5) + b);
sum -= delta; /* end cycle */
}
v[0]=y;
v[1]=z;
}
}
v[0]=y;
v[1]=z;
}
雖然TEA算法比 DES(Data Encryption Standard) 要簡單得多, 但有很強的抗差分分析能力,加密速度也比 DES 快得多,而且對 64 位數據加密的密鑰長達 128 位,安全性相當好。其可靠性是通過加密輪數而不是算法的複雜度來保證的。從中可以看到TEA 算法主要運用了移位和異或運算。密鑰在加密過程中始終不變。
歷史
套用
QQTEA 算法建立在標準 TEA算法的基礎上,使用16輪的加密(這是最低限,推薦應該是32輪)。QQ在使用這個算法的時候,由於需要加密不定長的數據,所以使用了一些常規的填充辦法和交織算法。
1 填充算法
如果明文本身的長度不是8的倍數,那么還要進行填充以使其成為8的倍數。以位元組為單位,令N=原始字元串+10+填充位元組數n,則N應該是8的倍數。
因為使用了不同的隨機數,所以填充的結果使得即使對於相同的明文,密文的結果也會不同。
2 交織算法
訊息被分為多個加密單元,每一個加密單元都是8位元組,使用TEA進行加密,加密結果與下一個加密單元做異或運算後再作為待加密的明文。