上一章节说了AES整体的加密流程,这一章节继续上一章节所说,说一下加密轮数及其细节。
先整体看下加密流程,这里以AES128为例,上节说过128长度(16字节)的加密轮数为10(上节地址AES加密),加密时首先把数据分组,然后生成状态矩阵,再进行加密,如图:
通过密钥编排函数把密钥扩展到44长度(这个长度其实是类似于4X44的一个矩阵,前4行4列是原始的密钥也就是16字节,后面的4X40的矩阵是扩展后的用户进行10次加密轮,每轮加密对应4列 剩余40列所以为10轮),加密轮前9次进行的都是一样的操作字节替换、行移位、列混合、轮密钥加。最后一次只有字节替换、行移位、轮密钥加。大致图如下:

其实就是一个简单的查表操作,AES有个S盒和逆S盒(这是一个16X16的矩阵)然后把状态矩阵中的字节高4位作为行,低4位作为列,进行表中查找。替换为找到的值。

例如,加密时,输出的字节S1为0x12,则查S盒的第0x01行和0x02列,得到值0xc9,然后替换S1原有的0x12为0xc9。状态矩阵经字节代换后的图如下:
行移位是一个简单的左循环移位操作。当密钥长度为128比特时,状态矩阵的第0行左移0字节,第1行左移1字节,第2行左移2字节,第3行左移3字节,如下图所示:

其实就是矩阵相乘。例:

如果这时s0,0矩阵是

则第一列运算结果为:

轮密钥加是将128位轮密钥Ki同状态矩阵中的数据进行逐位异或操作,如图:

其实解密就是每个操作的逆操作。
介绍差不多了,其实我们平时使用时不必要知道这些细节,只要会使用加解密就好。
谢谢你的支持,再看与转发 谢谢!!!