官术网_书友最值得收藏!

1.13 TEA加密算法

TEA是一種小型的加密算法,是由英國劍橋大學(xué)計(jì)算機(jī)實(shí)驗(yàn)室的D.J.Wheeler和R.M.Needham于1994年提出的。

TEA是DES型多層迭代分組加密算法,迭代層數(shù)r=2n,分組長度為64比特,密鑰長度為128比特。TEA加密算法是一個(gè)很簡單的程序,設(shè)置時(shí)間極短,不需要預(yù)置非線性代替表。TEA加密算法的每層變換都很簡單,是一個(gè)弱非線性變換,經(jīng)過足夠?qū)訑?shù)的迭代,可以使算法達(dá)到安全、保密的目的,所以迭代層數(shù)比較多,建議使用64層。

128比特的密鑰分成4個(gè)32比特的字,記為K0K3,層密鑰為2個(gè)字,第i層密鑰記為Ki0Ki1

TEA加密算法還要用到一個(gè)常數(shù)C,用十六進(jìn)制表示為:

C=9e3779b9=(-1)×231

C來自黃金分割數(shù),由C生成各層所用常數(shù)C1Cr,即

C2i-1=C2i=i×C mod 232, i=1, …, n

輸入明文記為(X0, X1),計(jì)算

Xi+1=[(Xi<<4+Ki0)⊕(Xi+Ci)⊕(Xi>>5+Ki1)]+Xi-1

式中,“+”為模232加。

TEA加密算法由交替使用模2加和模232加來提供非線性,由相反方向的移位使密鑰比特和數(shù)據(jù)比特反復(fù)混合。TEA加密算法沒有設(shè)置非線性代替表,使初始設(shè)置時(shí)間極短。

TEA加密算法存在等價(jià)密鑰,當(dāng)K0K1的最高位同時(shí)取反時(shí)等價(jià),同樣當(dāng)K2K3的最高位同時(shí)取反時(shí)也等價(jià),所以至少有3個(gè)等價(jià)的密鑰。

下面給出r=64時(shí)TEA加密算法C語言的描述。64層迭代可以看成32個(gè)循環(huán),每次循環(huán)為2層。密鑰為4個(gè)字,放在k[0]~k[1],明文放在k[0]~k[1]。C語言程序如下:

void code (unsigned long*p, unsigned long*k)
{
    unsigned long y=p[0], z=p[1], sum=0,     /*置初值*/
    delta=0x9e3779b9,                       /*常數(shù)*/
    n=32;
    while (n>0)
    {
        sum+=delta;
        y+=((z<<4)+k[0])^(z+sum)^((z>>5)+k[1]);
        z+=((y<<4)+k[2])^(y+sum)^((y>>5)+k[3]); n--;
    }
    p[0]=y; p[1]=z;
}

經(jīng)上述運(yùn)算后,p[0]和p[1]為密文。

主站蜘蛛池模板: 海晏县| 中宁县| 临夏市| 汶上县| 广宗县| 梁河县| 全椒县| 金塔县| 鹰潭市| 阿图什市| 鹰潭市| 南岸区| 道真| 胶南市| 古蔺县| 股票| 寿宁县| 改则县| 涞水县| 古田县| 德惠市| 临海市| 洪湖市| 桐柏县| 菏泽市| 邹平县| 苏州市| 新安县| 焦作市| 碌曲县| 墨脱县| 博兴县| 兴城市| 天津市| 岑巩县| 建阳市| 大庆市| 且末县| 岑溪市| 东港市| 佛坪县|