AES加密框图,以密钥长度128bit为例。

 

 一、AES加密过程

明文(4*4字节矩阵)与 圈密钥进行异或运算,进入圈迭代;

首先是第一圈,字节替换,行移位,列混合,圈密钥加,进入第二圈;

.....

一直到第九圈;

第十圈相比前九圈少了列混合,第十圈的变换结果就是密文。

详细步骤

1、字节替换

将128比特的输入数据变换成4*4的字节矩阵,将字节矩阵中每一个字节利用同一个S盒变换为另一个字节,变换后位置不变。

具体做法:将字节矩阵中一个字节转为16进制的数xy,替换表(S盒)中第x行第y列的字节就是对应的字节替换后的结果

 2、行移位变换

将第i行循环左移i个字节。将原来同一列中4个元素分散到不同的列中。

3、列混合变换

用一个固定的字节矩阵乘以输入的字节矩阵。

4、圈密钥加

将密钥字节矩阵与当前状态字节矩阵的对应字节异或。圈密钥是通过密钥生成算法从初始密钥中产生,其长度等于分组长度。

 

 密钥生成算法

 AES的圈密钥长度为128bit,即4*32位字,若迭代次数Nr,则一共需要4*(Nr+1)*32位字的密钥。AES-128(需要迭代10次)则需要44个32位字的密钥。

w0 w1 w2 w3 w4 .... w43 w44

每一个Wi是32位字。

记Nk=初始密钥长度/32。表示初始密钥可产生的32位字的个数。

密钥长度 128 192 256
Nk 4 6 8

对于不同的密钥长度,密钥生成算法有两种。Nk=4和Nk=6用一种方式,Nk=8用另外一种方式。

方式一:密钥长度为128和192

前Nk个32位字直接取自初始密钥(W0,W1,...Wk-1),后面的Wi是由前Nk个32字递归产生。

方式二