AES
AES是块加密,将128位明文作为AES的输入,产生128位密文输出。
AES加密和解密使用相同的算法和密钥,密钥长度支持128bit、192bit和256bit,根据密钥长度,分别使用10、12、14轮运算
AES的处理单位是字节,128位的明文分组和密钥都被分成16个字节,组成4*4的正方形矩阵,称为状态矩阵,在算法的每一轮中,状态矩阵的内容不断变化,最后的结果作为密文输出
128位密钥也是用字节为单位的矩阵表示,矩阵的每一列被称为一个32位比特字。通过轮密钥生成器,该密钥矩阵被扩展成一个44个字组成的序列W[0],W[1],...,W[43],该序列的前4个元素是原始密钥,用于加密运算中的初始密钥加,后面40个字分成10组,用于10轮加密运算中的轮密钥加
AES加密和解密
- 字节代换:对状态矩阵的每个字节应用S盒(S盒是一个16行16列的表,表中每一项都是一个字节)。把状态矩阵的每个字节的高4位作为行值,低4位作为列值,取出S盒对应的元素作为输出。
- 行移位:对状态矩阵行(0,1,2,3)进行左移(0,1,2,3)个字节
- 列混合:使用一个常数矩阵和每一个状态列矩阵相乘
- 轮密钥加:将128位轮密钥同状态矩阵中的数据进行逐位异或操作