TEA加密算法

TEA算法劍橋大學計算機實驗室的David Wheeler和Roger Needham於1994年發明。它是一種分組密碼算法,其明文密文塊為64比特,密鑰長度為128比特。TEA算法利用不斷增加的Delta(黃金分割率)值作為變化,使得每輪的加密是不同,該加密算法的疊代次數可以改變,建議的疊代次數為32輪。

基本介紹

  • 中文名:TEA加密算法
  • 發現人:David Wheeler和Roger Needham
  • 時間:1994
  • 類型:分組密碼算法
內容,歷史,套用,

內容

代碼如下:
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 ;
}
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;
}
雖然TEA算法比 DES(Data Encryption Standard) 要簡單得多, 但有很強的抗差分分析能力,加密速度也比 DES 快得多,而且對 64 位數據加密密鑰長達 128 位,安全性相當好。其可靠性是通過加密輪數而不是算法的複雜度來保證的。從中可以看到TEA 算法主要運用了移位和異或運算。密鑰在加密過程中始終不變。

歷史

TEA算法劍橋大學計算機實驗室的David Wheeler和Roger Needham於1994年發明。

套用

QQTEA 算法建立在標準 TEA算法的基礎上,使用16輪的加密(這是最低限,推薦應該是32輪)。QQ在使用這個算法的時候,由於需要加密不定長的數據,所以使用了一些常規的填充辦法和交織算法。
如果明文本身的長度不是8的倍數,那么還要進行填充以使其成為8的倍數。以位元組為單位,令N=原始字元串+10+填充位元組數n,則N應該是8的倍數。
具體的填充方法:第一個位元組為:(random()&0xf8)|n,隨後填充(n+2)個位元組random()&0xff ,後面接原始數據,最後填充7 個位元組0x00 。
因為使用了不同的隨機數,所以填充的結果使得即使對於相同的明文,密文的結果也會不同。
2 交織算法
訊息被分為多個加密單元,每一個加密單元都是8位元組,使用TEA進行加密,加密結果與下一個加密單元做異或運算後再作為待加密的明文。

相關詞條

熱門詞條

聯絡我們