文章目录[隐藏]
密码学学习记录 12 / 15
- 密码学学习记录|hash md5 算法
- 密码学学习记录|hash md5 算法练习样本一
- 密码学学习记录|hash md5 算法练习样本二
- 密码学学习记录|hash sha1 算法
- 密码学学习记录|hash sha1 算法练习样本一
- 密码学学习记录|hash sha256 算法
- 密码学学习记录|hash sha256 算法练习样本一
- 密码学学习记录|hash sha512 算法
- 密码学学习记录|hash hmac 算法
- 密码学学习记录|des 加解密算法
- 密码学学习记录|des - 3des 算法
- 密码学学习记录|aes 加解密算法
- 密码学学习记录|aes dfa 练习样本一
- 密码学学习记录|aes dfa 练习样本二
- 密码学学习记录|aes dfa 练习样本三
维基百科
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),又称Rijndael加密法(荷兰语发音: [ˈrɛindaːl],音似英文的“Rhine doll”),是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。现在,高级加密标准已然成为对称密钥加密中最流行的算法之一。
该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijndael为名投稿高级加密标准的甄选流程。
参考资料
Tips:本文 aes 算法原理图来自看雪论坛帖子
AES 算法描述
AES 有多种实现方式。1、标准法,2、查表法,3、白盒 AES。本文主要分享标准法的实现
AES 没有使用经典的 Feistel 结构,而是分组算法。
在 AES 标准规范中,分组长度只能是 128 位,也就是说,每个分组为 16 个字节。密钥的长度可以使用 128 位、192 位或 256 位。密钥的长度不同,推荐加密轮数也不同,如下表所示:
AES | 密钥长度 | 加密轮数 |
---|---|---|
128 | 4 | 10 |
192 | 6 | 12 |
256 | 8 | 14 |
本文主要分享 AES-128,ECB
AES 加密算法
AES 加密过程是在一个 4×4 的字节矩阵上运作,这个矩阵又称为“体(state)”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个 Byte)。(Rijndael 加密法因支持更大的区块,其矩阵的“列数(Row number)”可视情况增加)加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤:
-
1、AddRoundKey 矩阵中的每一个字节都与该次回合密钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。
-
2、SubBytes 透过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。
-
3、ShiftRows 将矩阵中的每个横列进行循环式移位。
-
4、MixColumns 为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每内联的四个字节。最后一个加密循环中省略MixColumns步骤,而以另一个AddRoundKey取代。
加密算法整体流程
-
1、密钥扩展
-
2、明文按照 16 个字节进行分组,4x4 矩阵
-
3、密钥加法层(取密钥的 0-3 进行计算)
-
4、循环 1...加密轮数
-
5、每次循环都需要操作,字节替换(S盒替换),行移位,列混淆,密钥加法
-
6、循环结束在操作,字节替换(S盒替换),行移位,密钥加法
密钥扩展
前面说到过,密钥长度不同,加密轮数也就不同。每轮加密都是 4x4 矩阵操作。例如输入的密钥为 16 个字节(4x4,四行四列),那就需要扩展到 4 x (1 + 10),44行。如果是 32 字节,那就需要扩展 4 x (14 + 1),60行。具体流程如下图
-
1、首先将 16 字节的密钥,依次放到 w[0..3] 里
-
2、剩下的 40 个,再按照一定的迭代计算规则依次存储
-
3、迭代计算规则。循环 4...44 次
-
4、判断 i 是否是四的倍数
-
5、否:w[i] = w[i - 4] ^ w[i - 1]
-
6、是:w[i] = w[i - 4] ^ G(w[i - 1])
-
7、G函数:循环左移一位,使用 S盒 字节替换,轮常量 Rcon 异或
轮密钥加(AddRoundKey)
即,输入跟密钥进行异或,如下图
字节替换(SubBytes)
即,输入明文矩阵跟 S盒进行置换,高位为行,低位为列。如下图:
行移位(ShiftRows)
如下图:
列混淆(MixColumns)
这是 aes 算法中,最复杂的一步。对 4x4 矩阵中的每个元素,都进行,有限域 GF(256) 运算
AES 解密算法
解密算法整体流程
就是加密算法,反向操作。tips: 此图是从下往上看
轮密钥加(AddRoundKey)
跟加密逻辑相同
逆字节替换(INV-SubBytes)
即,输入明文矩阵跟 逆S盒进行置换,高位为行,低位为列。如下图:
逆行移位(INV-ShiftRows)
如下图:
逆列混淆(INV-MixColumns)
跟加密逻辑相同,不过运算矩阵不同。参考图示
全部代码
注意该订单不支持退款,如有问题可联系博主