DES、AES、TEA加密算法的比较

控制/MCU

1814人已加入

描述

 

1.     DES算法介绍

DES 算法具有对称性既可以用于加密又可以用于解密。对称性带来的一个很大的好处在于硬件实现, DES 的加密和解密可以用完全相同的硬件来实现。DES 算法的明文分组是64 输出密文也是64 位。所以密钥的有效位数是56 加上校验位共64 位。总体流程如表所示:输入的64 位明文先经初始IP 变换形成64 位数据,64 位数据被分为两部分分别是部分和部分; L 经过16 次迭代形成新的64 新的64 位数据再经初始逆变换输出64 位密文。初始置换和逆初始置换是简单的移位操作。在迭代过程这一步骤替代是在密钥控制下进行的而移位是按固定顺序进行的它将数据分组作为一个单元来进行变换相继使用替代法和移位法加密,从而具有增多替代和重新排列的功能。迭代过程是DES 加密算法的核心部分。

2.     AES算法Rijndael介绍

AES算法Rijndael 密码是一个迭代型分组密码其分组长度和密码长度都是可变的,分组长度和密码长度可以独立的指定为128 比特,192 比特或者256 比特。AES 的加密算法的数据处理单位是字节,128 位的比特信息被分成16 个字节按顺序复制到一个4×的矩阵中称为状态(state),AES 的所有变换都是基于状态矩阵的变换。用Nr 表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系如表所示。在轮函数的每一轮迭代中包括步变换分别是字节代换运算(ByteSub())、行变换(ShiftRows())、列混合(MixColumns())以及轮密钥的添加变换(AddRoundKey()), 其作用就是通过重复简单的非线形变换、混合函数变换将字节代换运算产生的非线性扩散达到充分的混合在每轮迭代中引入不同的密钥从而实现加密的有效性

3.    DESAES算法比较:

DES算法1977年首次公诸于世以来,学术界对其进行了深入的研究,围绕它的安全性等方面展开了激烈的争论。在技术上,DES的批评主要集中在以下几个方面:

( 1) 作为分组密码,DES的加密单位仅有64位二进制,这对于数据传输来说太小,因为每个分组仅含8个字符,而且其中某些位还要用于奇偶校验或其他通讯开销。

( 2) DES的密钥的位数太短,只有56比特,而且各次迭代中使用的密钥是递推产生的,这种相关必然降低密码体制的安全性在现有技术下用穷举法寻找密钥已趋于可行。

(3) DES不能对抗差分和线性密码分析。迄今为止, DES算法中的S8个选择函数矩阵的设计原理因美国政府方面的干预不予公布。从这一方面严格地讲DES算法并不是一个真正的公开加密算法。。

( 4) DES用户实际使用的密钥长度为56bit, 理论上最大加密强度为256DES算法要提高加密强度(例如增加密钥长度), 则系统开销呈指数增长。除采用提高硬件功能和增加并行处理功能外,从算法本身和软件技术方面无法提高DES算法的加密强度。

相对DES算法来说,AES算法无疑解决了上述问题,主要表现在如下几方面:

( 1) 运算速度快,在有反馈模式、无反馈模式的软硬件中,Rijndael都表现出非常好的性能。

( 2) 对内存的需求非常低,适合于受限环境。

( 3) Rijndael是一个分组迭代密码,分组长度和密钥长度设计灵活。

( 4) AES标准支持可变分组长度,分组长度可设定为32比特的任意倍数,最小值为128比特,最大值为256比特。

( 5) AES的密钥长度比DES,它也可设定为32比特的任意倍数,最小值为128比特,最大值为256比特所以用穷举法是不可能破解的。在可预计的将来,如果计算机的运行速度没有根本性的提高,用穷举法破解AES密钥几乎不可能。

( 6) AES算法的设计策略是宽轨迹策略(Wide Trail Strategy, WTS)WTS是针对差分分析和线性分析提出的,可对抗差分密码分析和线性密码分析。总之,Rijndael算法汇聚了安全性、效率高、易实现性和灵活性等优点,是一种较DES更好的算法。

4.     TEA

TEA(Tiny Encryption Algorithm) 是一种简单高效的加密算法,以加密解密速度快,实现简单著称。算法真的很简单,TEA算法每一次可以操作64-bit(8-byte),采用128-bit(16-byte)作为key,算法采用迭代的形式,推荐的迭代轮数是64轮,最少32轮。目前我只知道QQ一直用的是16TEA。没什么好说的,先给出C语言的源代码(默认是32)

 1 void encrypt(unsigned long *v, unsigned long *k) {
 2     unsigned long y=v[0], z=v[1], sum=0, i;         /* set up */
 3     unsigned long delta=0x9e3779b9;                 /* a key schedule constant */
 4     unsigned long a=k[0], b=k[1], c=k[2], d=k[3];   /* cache key */
 5     for (i=0; i < 32; i++) {                        /* basic cycle start */
 6         sum += delta;
 7         y += ((z<<4) + a) ^ (z + sum) ^ ((z>>5) + b);
 8         z += ((y<<4) + c) ^ (y + sum) ^ ((y>>5) + d);/* end cycle */
 9     }
10     v[0]=y;
11     v[1]=z;
12 }
13 
14 void decrypt(unsigned long *v, unsigned long *k) {
15     unsigned long y=v[0], z=v[1], sum=0xC6EF3720, i; /* set up */
16     unsigned long delta=0x9e3779b9;                  /* a key schedule constant */
17     unsigned long a=k[0], b=k[1], c=k[2], d=k[3];    /* cache key */
18     for(i=0; i<32; i++) {                            /* basic cycle start */
19         z -= ((y<<4) + c) ^ (y + sum) ^ ((y>>5) + d);
20         y -= ((z<<4) + a) ^ (z + sum) ^ ((z>>5) + b);
21         sum -= delta;                                /* end cycle */
22     }
23     v[0]=y;
24     v[1]=z;
25 }

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
简单沉默 2016-09-09
0 回复 举报
好东西,值得学习 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分