DES 与 AES 算法
前言
前段时间看了一下DES 与 AES 的加密原理,为了以后温故知新,特意记录下来。
一、DES (Data Encryption Standard)
简介
数据加密标准(DES,Data Encryption Standard)是一种使用密钥加密的块密码,1976年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛流传开来。它基于使用56位密钥的对称算法。这个算法因为包含一些机密设计元素,相对短的密钥长度以及怀疑内含美国国家安全局(NSA)的后门而在开始时有争议,因此DES因此受到了强烈的学院派式的审查,并以此推动了现代的块密码及其密码分析的发展。
DES算法是一种用56位密钥来加密分组长度为64位数据的对称密钥算法(实际上函数要求一个64位的密钥作为输入,但是第8、16、24、32、40、48、56、64 等8位是校验位, 使得每个密钥都有奇数个 1,所以参与加密过程的只有56位)。
DES算法的入口参数有三个:
- Key:8个字节共64位,是DES算法的工作密钥;
- Data:8个字节64位,是要被加密或被解密的数据;
- Mode:DES的工作方式,有两种:加密或解密 。
DES的解密过程和加密相似,解密时使用与加密同样的算法,不过子密钥(见文中解释)的使用次序要反过来。
算法概述
DES算法整体流程图如下所示,
图1 DES算法整体流程图
下面根据上图从上到下介绍每个操作。
1.初始置换IP
将64 bit明文的位置进行置换,得到一个乱序的64 bit明文组,而后分成左右两段,每段为32bit,以L0和R0表示,IP中各列元素位置号数相差为8,相当于将原明文各字节按列写出,各列比特经过偶采样和奇采样置换后,再对各行进行逆序。将阵中元素按行读出构成置换输出,初始置换表如图2所示。
图2 初始置换表
即将输入的第58位换到第一位,第50位换到第2位,…,依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左 32位,R0 是右32位,例:设置换前的输入值 D1D2D3……D64,则经过初始置换后的结果为:L0=D58D50…D8;R0= D57D49…D7。具体的置换效果如图3所示。
图3 置换效果图
2.乘积变换
乘积变换是DES算法的核心部分,此步骤需要经历16轮,而且每一轮变换都需要一个48bit子密钥,共需要16个48bit密钥。将经过IP置换后的数据分成32 bit的左右两组,在迭代过程中彼此左右交换位置。每次迭代时只对右边的32 bit进行一系列的加密变换,在此轮迭代即将结束时,把左边的32 bit与右边得到的32bit做异或运算,作为下一轮迭代时右边的段,并将原来右边未经变换的段直接送到左边的寄存器中作为下一轮迭代时左边的段。
在每一轮迭代时&#