XXTEA加密算法

TEA算法是由劍橋大學(xué)計(jì)算機(jī)實(shí)驗(yàn)室的David?Wheeler和Roger?Needham于1994年發(fā)明,TEA是Tiny?Encryption?Algorithm的縮寫,以加密解密速度快,實(shí)現(xiàn)簡(jiǎn)單著稱。TEA算法每一次可以操作64bit(8byte),采用128bit(16byte)作為key,算法采用迭代的形式,推薦的迭代輪數(shù)是64輪,最少32輪。為解決TEA算法密鑰表攻擊的問題,TEA算法先后經(jīng)歷了幾次改進(jìn),從XTEA到BLOCK?TEA,直至最新的XXTEA。XTEA也稱做TEAN,它使用與TEA相同的簡(jiǎn)單運(yùn)算,但四個(gè)子密鑰采取不正規(guī)的方式進(jìn)行混合以阻止密鑰表攻擊。Block?TEA算法可以對(duì)32位的任意整數(shù)倍長(zhǎng)度的變量塊進(jìn)行加解密的操作,該算法將XTEA輪循函數(shù)依次應(yīng)用于塊中的每個(gè)字,并且將它附加于被應(yīng)用字的鄰字。XXTEA使用跟Block?TEA相似的結(jié)構(gòu),但在處理塊中每個(gè)字時(shí)利用了相鄰字,且用擁有兩個(gè)輸入量的MX函數(shù)代替了XTEA輪循函數(shù)。本文所描述的安全機(jī)制采用的加密算法就是TEA算法中安全性能最佳的改進(jìn)版本-XXTEA算法。

XXTEA算法的結(jié)構(gòu)非常簡(jiǎn)單,只需要執(zhí)行加法、異或和寄存的硬件即可,且軟件實(shí)現(xiàn)的代碼非常短小,具有可移植性,非常適合嵌入式系統(tǒng)應(yīng)用。由于XXTEA算法的以上優(yōu)點(diǎn),可以很好地應(yīng)用于嵌入式RFID系統(tǒng)當(dāng)中。

XXTEA算法的C語言表達(dá):

#define??????????????MX???????????(z>>5^y<<2)?+?(y>>3^z<<4)^(sum^y)?+?(k[p&3^e]^z);

long????????btea(long*?v,?long?n,?long*?k)

{unsigned?long?z=v[n-1],?y=v[0],?sum=0,?e,?DELTA=0x9e3779b9;????????long?p,?q?;

if?(n?>?1)?{??????????/*?加密過程?*/

q?=?6?+?52/n;

while?(q--?>?0)

{sum?+=?DELTA;???????e?=?(sum?>>?2)?&?3;

for?(p=0;?p<n-1;?p++)????????y?=?v[p+1],????????z?=?v[p]?+=?MX;

y?=?v[0];??????z?=?v[n-1]?+=?MX;}

return?0?;

}?else?if?(n?<?-1)?{??????????/*?解密過程?*/

n?=?-n;????????q?=?6?+?52/n;??????sum?=?q*DELTA?;

while?(sum?!=?0)?{?e?=?(sum?>>?2)?&?3;

for?(p=n-1;?p>0;?p--)?z?=?v[p-1],?y?=?v[p]?-=?MX;

z?=?v[n-1];?y?=?v[0]?-=?MX;?????????sum?-=?DELTA;?}

return?0;?}??return?1;?}

上述算法描述中,v表示為運(yùn)算的長(zhǎng)整型數(shù)據(jù)的首地址,k為長(zhǎng)整型的密鑰的首地址,n表示要要運(yùn)算的組元個(gè)數(shù),正表示加密,負(fù)表示解密。N是以32bit為基本單位的組元個(gè)數(shù)。

訂正:對(duì)于加密的示意圖,在Xr-1到>>3那里,是不經(jīng)歷異或的運(yùn)算的。

13838041802

yuzhe

1.1[?~(*0