1、DES 采用 56位有效密钥,AES 采用 多种 密钥长度
2、DES 对 64位分组数据进行加密,AES对 128位分组数据进行加密
3、不同于 DES ,AES 不是采用 Feistel 结构,而是置换-组合结构
4、DES 中大量的位操作在软件实现方面不是非常方便,而AES 采用了字节操作。
对不同长度的密钥,AES采用不同的加密轮次:
128位 | 192位 | 256位 |
10 | 12 | 14 |
加密过程下面有个视频,我觉得讲得很详细。
①: 密钥扩展:简单说就是将原来的密钥扩展到足够用的长度。
128位密钥: 扩展到 44字(176字节)
192位密钥: 扩展到 13*4 = 52 字
256位密钥: 扩展到 15*4 = 60 字
扩展过程请参考代码(不贴出来)和视频。 fun_KeyExpansion()
②: 轮密钥加:只是将 数据块和 该轮的密钥进行异或运算 。
③:字节替换:有个S盒可以进行替换。(相对于 DES 的替换 ,感觉这个函数的实现是小儿科 )
比如现在有一个字节为: 0x19 (16进制!) 则替换为 0xd4
④: 行移位:分成 4 行 第一行不用移位,第二循环左移 8 位 (一个字节 !) 第三行循环移2个字节,第四行移3个字节。
⑤: 列混淆:这里采用了 上的乘法 。
这几个宏定义,定义了几个运算 而计算过程参考下图和 线性代数知识。
解密过程调用函数不同,理解了加密解密只是一个逆过程。
①:首先数据在内存中存放方式:
②:行移位的时候采用按字操作,需要注意字有大小端之分:使用宏定义<Little_Endian> 进行控制