一、介绍

DES算法全称Data Encryption Standard,即数据加密标准,是一种对称加密算法

DES密钥长度为56位,在形式上是一个64位数。DES以64位(8字节)为分组对数据加密,每64位明文,经过16轮置换生成64位密文,其中每字节有1位用于奇偶校验,所以实际有效密钥长度是56位。 IPSec还支持3DES算法,3DES可提供更高的安全性,但相应地,计算速度更慢。

RSA算法非对称加密算法的代表,它的一个典型应用是在ssh无密码登录中生成一对公钥、私钥。但是,RSA算法有一个致命缺点:处理速度很慢,因此只适合加密安全性要求极高而又较短的信息。相比之下,DES处理速度则快多了,可用于加密信息比较长的场合。

而且,通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这也正是现在金融交易网络的流行做法。目前,DES算法在 POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN的加密传输,IC 卡与POS间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。

DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被 加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。DES算法把64位的明文输入块转变为64位的密文输出块,它所使用的密钥也是 64位。

二、DES加密原理图

分组加密

DES加密过程总览

子密钥生成过程

DES加密过程

三、DES加密详解

1、获取子密钥Ki(一共16个)

DES的初始密钥K为64位,按8行8列从左往右从上往下排列,其中每行第8位用于奇偶校验,因此Key实际可用位数为56。

首先,64位的初始密钥K经过PC-1之后,生成56位的串。

由表可知,初始密钥K第8、16、24、32、40、48、56、64共8个校验位被去掉,剩余56位按表所示方式排列:第57位放在第1位,第49位放在第2位,依次类推。

经过PC-1置换之后,将置换输出再分为前28位C0和后28位D0两部分,分别循环左移1位得到C1和D1,然后将两部分合并成56位,然后经过PC-2变换之后生成48位的子密钥K1。

C1、D1分别循环左移1位得到C2、D2,合并经过PC-2生成子密钥K2。依次类推,直至生成子密钥K16。注意,每轮循环左移的位数有如下规定:

至此,加密过程需要的16个子密钥全部生成完毕,下面我们来看具体如何加密。

 2、加密过程

2.1初始置换

64位明文串经过一个初始置换函数IP,生成重新排列之后的64位输出,分为左32位L0和右32位R0,用于F函数16轮迭代运算的首次迭代的初始输入。

2.2迭代运算

R0与子密钥K1经过密码函数变换F(R0,K1) 得到32位输出f1,f1与L0做二进制异或运算,结果赋给R1,R0则原封不动地赋给L1。然后R1与子密钥K2经过函数变换F(R1,K2)得到32 位输出f2,f2与L1做二进制异或运算,结果赋给R2,R1则原封不动地赋给L2....依此类推,一共经过16次迭代运算直至最后生成L16和 R16。

2.3末置换

L16、R16合在一起64位,经过末置换函数IP-1,得到64位密文输出。

3、密码函数F

密码函数F接受两个输入:32位数据和48位子密钥,输出结果为32位。具体运算如下:

3.1扩展置换

32位数据通过扩展置换E从32位扩展为48位,扩展置换通过将原32位数据中的某些位重复出现达到扩展的目的。

3.2异或运算

扩展置换的输出(48位)与子密钥(48位)做异或运算,输出为48位。

3.3S盒置换

将异或运算得到的48位结果数据分成8个6位的块,每块通过对应的一个S盒产生一个4位的输出。8个6位数据的置换结果连在一起,形成32位输出结果。

每个S盒实际上是一张4(0-3)行16(0-15)列的置换表,注意,行列编号都从0开始。

S 盒接收6位的数据,经过置换输出4位的数据,其具体置换过程为:将6位数据的第1位和第6位取出来,形成一个2位的二进制数x(从0-3),剩下的4位构 成另一个二进制数y(从0-15),然后查出S盒x行y列对应的十进制整数,将该整数转换为一个4位二进制数,即为S盒的输出。

3.4P盒置换

S盒置换的最终结果32位数据通过P盒置换,同样生成32位输出结果。