假设我们已经有明文text和密钥m,均为128位(4*4bytes),我们可以m看着一个4*4的byte数组。
加密方和解密方拥有着共同的密钥(m),通过相同的方法将m1扩展成相同的11*4*4byte的扩展密钥(我们叫它M吧,M为11个m大小,可用44*4的byte数组去装),当然加密方的扩展密钥也是一样的。
一、获取扩展密钥M的扩展方法:
(M在结构上由m0,m1,m2....,m11组成;mi大小等于m,均为4*4的byte数组;一个mi用于一轮加密;M为44*4的byte数组)
i为第i个m结构,j为M的行号(0<=j<44)
for m[4]->m[43]
当 i=0, m0=m;
当 i>0 && j%4!=0,M[j]=M[j-4]^M[j-1];
当 i>0 && j%4==0,M[j]=M[j-4]^(SubWord(RotWord(M[j-1])) ^Rcon[j/4] );
其中SubWord函数RotWord函数是2个操作,Rcon是一个固定常数数组。
SubWord: 将Mi里面的每个字节的,左4位值为x,右4位为y,用sbox[x][y]的值来更新代替该字节。(sbox是16*16的byte类型的固定数组)
RotWord : 将Mi里面4个字节实现循环左移1个字节