,将State初始化为x,并进行AddRoundKey操作,将RoundKey与State异或。l对前Nr-1轮中的每一轮,用S盒对进行一次代换操作,称为SubBytes;对State做一置换ShiftRows;再对State做一次操作MixColumns;然后进行AddRoundKey操作。l依次进行SubBytes、ShiftRows和AddRoundKey操作。l将State定义为密文y。(bytein[4*Nb],byteout[4*Nb],wordw[Nb*(Nr+1)])beginbytestate[4,Nb]state=inAddRoundKey(state,w[0,Nb-1])forround=1step1toNr-1SubBytes(state)ShiftRows(state)MixColumns(state)AddRoundKey(state,w[round*Nb,(round+1)*Nb-1])endforSubBytes(state)ShiftRows(state)AddRoundKey(state,w[Nr*Nb,(Nr+1)*Nb-1])out=stateend2KeyExpansion(),再上初始及最后2轮,需构造11轮密钥。每一轮密钥由4个字组成。每个字由4个byte组成。:byte[]key,byte[]w//key为密钥w为扩展的密钥输出:byte[]w//扩展密钥长度为4*4*11处理:1)建立一个4byte的一维数组,存放一个字。Byte[]temp;2)将密钥key[0..15]送至w[0..15];//已赋值4个字给w。3)forI=4to43//以下每次处理一个字(32bit)temp=w[I-1];if(I=0mod4)//处理一个字thenforj=1to4//字的4byte处理在此循环中取temp数组下标的次序为1,2,3,0//RotWord操作如果是字的首byte,取Rcon常数Rcon(I/4);temp[j]=Sbox(temp[(j+1)/4]^Rcon常数endfortemp=SubWord(RotWord(temp))⊕Rcon[i/4]endifw[I]=w[I-4]⊕temp;endfor4)输出w3多项式乘法modGF(28)(28)按多项式乘法,并mod不可约多项式m(x)=x8+x4+x3+x+1。:bytea,byteb输出:byter数学基础:GF(28)有限域性质:两个元素的加法与两个字节按位模2加是一致的;乘法满足结合律;考虑多项式中的一项aixi(i∈0-7),用一次x乘以多项式:b(x)=b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0,得到b7x8+b6x7+b5x6+b4x5+b3x4+b2x3+b1x2+b0x(式1)将结果模m(x)求余得到x*b(x)。如果b7=0,则式1就是x*b(x)。如果b7不等于0,则必须从式1中减去m(x)后结果为x*b(x)。用x乘一个多项式简称x乘。由此得出,aixi乘以b(x)
AES加密算法主要步骤 来自淘豆网www.taodocs.com转载请标明出处.