代碼如下:
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進行加密,加密結果與下一個加密單元做異或運算後再作為待加密的明文。
相關詞條
-
tea算法
在安全學領域,TEA(Tiny Encryption Algorithm)是一種分組加密算法,它的實現非常簡單,通常只需要很精短的幾行代碼。TEA 算法...
-
密碼學
一般稱為加密算法,解密方法一般稱為解密算法。直到現代以前,密碼學幾乎專指...
基本簡介 發展歷程 理論基礎 專業術語 學科經歷 -
crypto
, Diamond2, TEA, SAFER, 3-WAY, GOST, SHARK...賴於對加密算法和解密算法的保密。因此,分組密碼的加密和解密算法可以公開。4...
簡介 特徵 -
信息安全原理與實踐(第2版)
593.3.5 另外三個分組密碼加密算法 613.3.6 TEA算法...