AES算法实例
AES是常用的对称加密算法,采用相同秘钥对明文进行加解密,他的速度比RSA算法要快很多,一般在数据加解密和文件加解密过程中使用,而RSA则更多用于密钥传输,常见密钥长度为128、192,256位。
AES加密是一种分组算法,若明文超过128位,则讲其分成多个128位的块再进行加密,密钥生成时会讲秘钥扩展成128位(以128位为例)
加密过程
在密钥长度为128位时,要进行10轮循环运算,其中9轮为subBytes->ShiftRows->mixColumns->addRoundKey,最后一轮为subBytes->ShiftRows->addRoundKey,过程见下图
subBytes(字节代换)
将明文与S盒(S盒图片来自ReadingLover)进行字节代换
通过一一代换得到代换后的值,
ShiftRows(行移位)
第一行不变第二行向左移动一位,第三行向左移动两位,第4行移动三位
mixColumns(列混合)
将上一步得到的结果的每一列列乘MC矩阵(伽罗瓦矩阵)得到新的结果
计算方法为
x乘01:就是x本身
x乘02:把x转化为二进制左移一位,如果会溢出(原先x最高位为1),加(异或)1b
比如ad*02,将ad转化为二进制为10101101,左移一位为01011010,因为溢出,所以要计算01011010 ⊕00011011得到结果为01000001
比如66*02,将66转化为二进制为01100110,左移一位为11001100,得到结果即为11001100
x乘03:x * 03 = (x * 02)+ x,用前两个方法计算
矩阵乘的计算方法为行乘列相加以第一列为例,02×ad+03×e6+01×5d+01×fb=d6,剩下的15个结果按这种方式计算出来
最终得到
addRoundKey(密钥轮加)
用轮密钥与上一步结果进行简单的亦或运算
假设轮密钥为
最终得到结果
整个计算过程为:
以上过程就是一次循环运算,将结果再进行8次这样的循环(共9次),最后一次循环不用mixColumns,这样AES加密的过程就基本完成了