`
enefry
  • 浏览: 36269 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

AES 加密解密

 
阅读更多

  高级加密标准(Advanced Encryption Standard,AES)

 

 

一、DES 与 AES 比较:

1、DES 采用 56位有效密钥,AES 采用 多种 密钥长度

2、DES 对 64位分组数据进行加密,AES对 128位分组数据进行加密

3、不同于 DES ,AES 不是采用 Feistel 结构,而是置换-组合结构

4、DES 中大量的位操作在软件实现方面不是非常方便,而AES 采用了字节操作。

 

二、图示 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个字节。

 

 

⑤: 列混淆:这里采用了  上的乘法 。

#define GF_01(b) ((byte)b)
#define GF_02(b) ((byte)((b < 0x80)? ((b<<1)) : (((b<<1) ^ 0x1b))))
#define GF_03(b) ((byte)(((GF_02(b)))^ (( b))))

这几个宏定义,定义了几个运算 而计算过程参考下图和 线性代数知识。


 

 

 

解密过程调用函数不同,理解了加密解密只是一个逆过程。

 

 

四、实现过程的一些解释:

①:首先数据在内存中存放方式:


 ②:行移位的时候采用按字操作,需要注意字有大小端之分:使用宏定义<Little_Endian> 进行控制


 

 

  • 大小: 58.3 KB
  • 大小: 889 Bytes
  • 大小: 4.9 KB
  • 大小: 51.9 KB
  • 大小: 10.8 KB
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics