TEA加密算法

TEA加密算法,由劍橋大學計算機實驗室的David Wheeler和Roger Needham於1994年發明。它是一種分組密碼算法,其明文密文塊為64比特,密鑰長度為128比特。

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&#91;0&#93; = left ;
crypt&#91;1&#93; = 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進行加密,加密結果與下一個加密單元做異或運算後再作為待加密的明文。

相關詞條

相關搜尋

熱門詞條

聯絡我們