DBMNG数据库管理与应用

书籍是全世界的营养品。生活里没有书籍,就好像没有阳光;智慧里没有书籍,就好像鸟儿没有翅膀。
当前位置:首页 > 经验分享 > Java组件

DES与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个字节。

 

 

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

C代码  收藏代码
  1. #define GF_01(b) ((byte)b)  
  2. #define GF_02(b) ((byte)((b < 0x80)? ((b<<1)) : (((b<<1) ^ 0x1b))))  
  3. #define GF_03(b) ((byte)(((GF_02(b)))^ (( b))))  

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


 

 

 

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

 

 

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

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


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


 

 

本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号