本文章来自:b站:”可厉害的土豆“

【我只是简单的搬运了一下】看文章不如看视频

基础

AES属于分组加密算法

明文长度固定为128

密钥长度可以是128,192,256

当密钥的长度是128位的时候,进行 10次循环

当密钥的长度是192位的时候,进行 12次循环

当密钥的长度是256位的时候,进行 14次循环

最后得到的密文也是128位

过程

我们用 128位密钥来进行讲解过程

明文–>初始变化–>9次循环运算–>1论最终运算–>密文

初始变化

将16个字节的明文和密钥转化成4*4的矩阵。

将这2个矩阵进行异或操作

image-20231205184451057

9论循环变换

分为:字节代换–>行位移–>列混合–>轮密钥加

字节代换

将处理出来的结果和S-BOX表进行一个映射关系

比如如下的19进行查表后:第一行第9列,将19转换成d4

image-20231205184633677

将所有的进行代换

image-20231205184723295

行位移

  • 第一行左移0个字节
  • 第二行左移1个字节
  • 第三行左移2个字节
  • 第四行左移3个字节

image-20231205184843914

将字节代换后的数据进行行移位后:

image-20231205184923477

列混合

将输入的输入的4*4的矩阵左乘一个固定的4*4矩阵

【这里的左乘不是通常意义上的左乘,而是有限域的左乘】

image-20231205191846568

image-20231205185128077

通常意义上的矩阵的乘法是行和列对于相乘后相加。但是这里的乘和加都不是普通理解的乘和加

这里进行的加是进行异或操作

  • 乘法

针对02和03,01就是数据本身。

02:

  • 当a7==0的时候,将数据左移一位

  • 当a7==1的时候,将数据左移一位后得到的值和 00011011 进行异或

image-20231205192149457

03:

将03转化成02+01

【如上图】

image-20231205185515187

轮密钥加

将上面得到的结果和子密钥进行异或操作

子密钥:是最开始输入的4 *4的密钥进行扩展得到10论的子密钥

【它第一次加密的时候用的是子密钥而不是最开始输入的密钥】

image-20231205185643142

密钥扩展

W表示的是列,W1表示第一列

image-20231205190109318

可以看到当i是4的倍数的时候是进行了一个T函数的

T函数

要将W([i-1])这一列的进行如下的三次变换

字循环–>字节代换–>轮常量异或

字循环

如果该列从上到下定义为:b0,b1,b2,b3。进行字循环后变成:b1,b2,b3,b0。

也就是看着像是想上循环移动了一位

image-20231205190756342

字节代换

将字循环得到的数据进行S-BOX的查表映射

image-20231205190956343

轮常量异或

轮常量是给定的数据,每次轮换的时候都是使用不同的数据,

论常量:

image-20231205191421065

image-20231205191421065

经过上面的变换就会得到10论的论密钥

image-20231205191611197

然后进行论密钥加

最后一轮变换

最后一轮变化和上面一样,但是不进行列混合

最后就能得到密文