AES明文在加密过程中涉及到字节代换、行移位、列混合、轮密钥加等过程。这里对列混合的算法做出一些浅显的解释。
列混合其实就是对一个状态的每一列去乘一个矩阵,其中乘法是在有限域GF(2^8)内进行的,不可约多项式为x^8+x^4+x^2+x+1如图:
先把算法代码列出来:
void AES::MixColumns(unsigned char state[][4]) //列混合
{
unsigned char t[4];
int r,c;
for(c=0; c
{
for(r=0; r<4; r++)
{
t[r] = state[r][c]; //每一列中的每一个字节拷贝到t[r]中
}
for(r=0; r<4; r++)
{
state[r][c] = FFmul(0x02, t[r]) //矩阵计算,其中加法为异或
^ FFmul(0x03, t[(r+1)%4])
^ FFmul(0x01, t[(r+2)%4])
^ FFmul(0x01, t[(r+3)%4]);
}
}
}
unsigned