无题
本文章来自:b站:”可厉害的土豆“
【我只是简单的搬运了一下】看文章不如看视频
基础
AES属于分组加密算法
明文长度固定为128位
密钥长度可以是128,192,256
当密钥的长度是128位的时候,进行 10次循环
当密钥的长度是192位的时候,进行 12次循环
当密钥的长度是256位的时候,进行 14次循环
最后得到的密文也是128位
过程
我们用 128位密钥来进行讲解过程
明文–>初始变化–>9次循环运算–>1论最终运算–>密文
初始变化
将16个字节的明文和密钥转化成4*4的矩阵。
将这2个矩阵进行异或操作
9论循环变换
分为:字节代换–>行位移–>列混合–>轮密钥加
字节代换
将处理出来的结果和S-BOX表进行一个映射关系
比如如下的19进行查表后:第一行第9列,将19转换成d4
将所有的进行代换
行位移
- 第一行左移0个字节
- 第二行左移1个字节
- 第三行左移2个字节
- 第四行左移3个字节
将字节代换后的数据进行行移位后:
列混合
将输入的输入的4*4的矩阵左乘一个固定的4*4矩阵
【这里的左乘不是通常意义上的左乘,而是有限域的左乘】
通常意义上的矩阵的乘法是行和列对于相乘后相加。但是这里的乘和加都不是普通理解的乘和加
- 加
这里进行的加是进行异或操作
- 乘法
针对02和03,01就是数据本身。
02:
当a7==0的时候,将数据左移一位
当a7==1的时候,将数据左移一位后得到的值和 00011011 进行异或
03:
将03转化成02+01
【如上图】
轮密钥加
将上面得到的结果和子密钥进行异或操作
子密钥:是最开始输入的4 *4的密钥进行扩展得到10论的子密钥
【它第一次加密的时候用的是子密钥而不是最开始输入的密钥】
密钥扩展
W表示的是列,W1表示第一列
可以看到当i是4的倍数的时候是进行了一个T函数的
T函数
要将W([i-1])这一列的进行如下的三次变换
字循环–>字节代换–>轮常量异或
字循环
如果该列从上到下定义为:b0,b1,b2,b3。进行字循环后变成:b1,b2,b3,b0。
也就是看着像是想上循环移动了一位
字节代换
将字循环得到的数据进行S-BOX的查表映射
轮常量异或
轮常量是给定的数据,每次轮换的时候都是使用不同的数据,
论常量:
经过上面的变换就会得到10论的论密钥
然后进行论密钥加
最后一轮变换
最后一轮变化和上面一样,但是不进行列混合
最后就能得到密文