AES算法详解
时间:2021/12/20
一.AES加密算法
1.AES分组长度、密钥长度、轮数的关系
AES的分组长度为128bit,密钥长度是可选的,分别为128/192/256bit,对应的轮数分别为10/12/14。
2.加密流程图
上图以密钥长度为128bit为例,一共有10轮。每一轮有4步,分别是字节代换、行移位、列混淆和轮密钥加,其中在第一轮开始之前要先进行一个轮密钥加,然后在最后一轮(也就是第十轮要少一次列混淆,总的来说多一次轮密钥加,少一次列混淆)
3.AES的分组
分组:对于输入的128bit数据,有16个字节,把四个字节作为一组,可以形成一个4*4的矩阵。
4.AES的密钥生成
轮密钥的生成;在使用128bit密钥的情况下,需要进行10轮操作,也就是进行11次轮密钥加,需要11个轮密钥。若一列是4个字节,则一轮需要4列(也就是128bit),11轮需要44列,也就是在原来密钥的情况下还要产生40列。新列的产生方法如上面的公式所示。
5.字节代换(S盒)
字节代换(S盒):之前说过将输入的一个明文分组作为一个4*4的矩阵,矩阵的每个位置都是一个字节(即8bit)。AES的S盒是一个16*16的矩阵,所以在进行字节代换时,将该字节的前4位作为S盒的行号,后4位作为S盒的列号,将明文分组的字节替换成S盒中对应的字节。
6.行移位
行移位:第一行整体不移位,第二行整体左移一个字节,第三行整体左移两个字节,第四行整体左移三个字节。
7.列混淆
列混淆:如上图所示,列混淆就是在每一列的左边乘上一个矩阵来进行变换。
8.轮密钥加
轮密钥加:将上一个运算的结果与轮密钥进行异或。
二.AES解密算法
从上图的解密算法可以看出来,AES的加密算法和解密算法并不一样(如果解密是加密的逆过程,则输入密文后,应该进行轮密钥加、行移位求逆和字节代换求逆,而实际上进行的是轮密钥加、字节代换求逆、行移位求逆、列混淆求逆和密钥混淆求逆加)。
三.AES的特点
努力,向上,自律