DES加解密原理

1.   简介

       DESData Encryption Standard(数据加密标准)的缩写。它是由IBM公司研制的一种对称密码算法,美国国家标准局于1977年公布把它作为非机要部门使用的数据加密标准。

       DES加密算法是一种典型的对称加密,分组算法,以64位为分组,对数据加密,它的密钥长度是56(密钥可以是任意的56位的数,而且可以任意时候改变),加密解密用同一算法。

2.   DES加密算法流程概要(可配合下文的详细流程进行理解):

       首先要生成一套加密密钥,从用户处取得一个64位长的密码口令(密钥中每个第8 位都用作奇偶校验,故有效密钥长度是56位),然后通过等分、移位、选取和迭代(下文有等分、移位、选取和迭代的详细过程)形成一套16个加密密钥,分别供每一轮运算中使用。

       DES64(bit)的明文分组M进行操作,M经过一个初始置换表IP,置换成m0。将m0明文分成左半部分和右半部分m0 = (L0R0),各32位长。然后进行16轮完全相同的运算(迭代),这些运算被称为函数f,在每一轮运算过程中数据与相应的密钥结合。

       在每一轮中,密钥位移位,然后再从密钥的56位中选出48位。通过一个扩展置换将数据的右半部分扩展成48位,并通过一个异或操作替代成新的48位数据,再将其压缩置换成32位。这四步运算构成了函数f。然后,通过另一个异或运算,函数f的输出与左半部分结合,其结果成为新的右半部分,原来的右半部分成为新的左半部分。将该操作重复16次。

       经过16轮迭代后,左,右半部分合在一起经过一个末置换(数据整理),这样就完成了加密过程。

加密流程如图所示:

DES加解密原理

3.   DES加密算法详细过程:

3.1.  A密钥生成

3.1.1.   A-1 取得密钥

从用户处取得一个64(本文均指二进制位))长的密码口令key

DES加解密原理

       去除64位密码中作为奇偶校验位的第816243240485664位,剩下的56位作为有效输入密钥。

3.1.2.   A-2 等分密钥

1
输入密钥位序/ A位序对照表

DES加解密原理

1:密钥A位序对照表

注:表中每个单元格的数字是输入密钥位序,每个单元格的位置排序就是A位序,从左向右排,排完一行接着排下一行(下同)。

2:
输入密钥位序/ B位序对照表

DES加解密原理

2: 密钥B位序对照表

  通过以上两个表,把第A-1步中生成56位输入密钥分成均等的AB两部分,每部分为28位(注意:以上两个表中没有816243240485664位,是因为这些位都是上文A-1步中提到的奇偶校验位)。而且,等分为两部分的过程也不是简单地前后一分为二,而是参照表1和表2把输入密钥的位值填入相应的位置。 按对照表1所示,A的第一位为输入的64位密钥的第57位,A的第2位为64位密钥的第49位,……,依此类推,A的最后一位第28位是64位密钥的第36位。这样,形成了AB两部分:

DES加解密原理

 3.1.3.   A-3 密钥移位

3
每次迭代时密钥循环
左移的位数

DES加解密原理

3:密钥移位

  DES算法的密钥是经过16次迭代(循环左移)得到一组密钥的,把在第A-2步中生成的AB视为迭代的起始密钥,表3显示每一次迭代时密钥循环左移的位数。 比如在第1次迭代时密钥循环左移1位,第3次迭代时密钥循环左移2位。第9次迭代时密钥循环左移1位,第14次迭代时密钥循环左移2位。

第一次迭代:DES加解密原理,第i次迭代:DES加解密原理

3.1.4.      A-4 密钥选取

在第A-3步中第i次迭代生成的两个28位长的密钥为DES加解密原理,

DES加解密原理,把DES加解密原理合并,得

DES加解密原理

 

4
56
位密钥C的位序与加密密钥K的位序对照表

DES加解密原理

4: 密钥C位序对照表

按照表4所示k的第一位为56位密钥的第14位,k的第2位为56位密钥的第17位,。。。,依此类推,k的最后一位第48位是56位密钥的第32位。 这样,就生成了一个48位使用密钥:

DES加解密原理

 这个密钥在后面的加密运算中将与进行第i次迭代加密的数据进行按位异或。

3.1.5.   A-5 密钥迭代

  DES算法密钥生成需要进行16次迭代,在完成16次迭代前,循环执行第A-3步和第A-4步,最终形成16套加密密钥:key[0]key[1]key[2]…key[14]key[15]

 

3.2.       B数据的加密操作

3.2.1.   B-1 取得数据

  把明文数据分成64位的数据块,不够64位的数据块以适当的方式补足(java中有好几种填充方式,这将在以后的java实现源码分析相关的文章中介绍):

DES加解密原理

3.2.2.   B-2 初始换位置换

5:初始置换表

DES加解密原理

5:数据初始置换表

注:表中每个单元格的位置排序是新数据的位序。下同。
  按照表5所示把输入的64位数据的原第58位换到第一位,原第50位换到第二位,依此类推,。。。,原第7位换到第64位。最后的得到新的64位数据。

置换前(oldData)与置换后(oldData)的数据如下:

DES加解密原理

3.2.3.    B-3 数据扩展

6 数据扩展对照表(输入数据位序/生成新数据位序)

DES加解密原理


6 数据扩展对照表

第一次迭代以第B-2步中生成的newData作为输入数据,第i (i > 1)次迭代以第i-1次的64位输出数据为输入数据,先把64位数据按位置等分成左右两部分:

DES加解密原理

       保持left不变,根据表6right32位扩展置换成48位。在数据扩展操作中,有些输入数据位(如第14517282932……等数位)用了两次,因此数据得到了扩展。这样得到扩展后的48位右半部分为: 

DES加解密原理

把扩展后的48right与上文A-5步第i次迭代生成的48位加密密钥进行按位异或操作

DES加解密原理

形成一个新的48位的right

DES加解密原理

3.2.4.   B-4 数据压缩

先介绍8个压缩置换表:

7.1:数据压缩置换表(灰色栏内是置换前的十进制数字,白色栏内是置换后的16进制数字)

DES加解密原理

7.1:数据压缩置换表1

7.2

DES加解密原理

7.2:数据压缩置换表2

7.3 至表7.8与上表形式完全相同,仅数值不同,为节省篇幅从略不表。 

 在B-3步中形成了48位的right,

DES加解密原理

需要把48位的right值转换成32位的right值。置换的方法如下:
第一步,先把right视为由86位二进制块组成,

DES加解密原理

a,b…. h都是6位二进制数,转换成10进制整数的值应当都不大于64

       二步,a,b…h转换成10进制整数后,在对应的表中根据转换后整数值取得对应位置的替代值。这些替代值都是一个16进制的个位数,因此,每个替代值只占有二进制数4位。
  转换时各查各表:
  a对应表7.1b对应表7.2c对应表7.3d对应表7.4e对应表7.5f对应表7.6g对应表7.7h对应表7.8
  比如:
  a = 32 ,则到表7.1中找到32的位置,把对应的替代值16进制的8赋给a
  b = 53 ,则到表7.2中找到的位置,把对应的替代值16进制的c赋给b
  g = 16 则到表7.7中找到16的位置,把对应的替代值16进制的a赋给g
  这样,每6位用一个4位替换,就完成了从48位向32位数据的压缩置换。

DES加解密原理

 有些资料中介绍6位转4位的实现方法与本文所采用的不同,但殊途同归,最终的目的是相同的。

3.2.5.   B-5 数据换位置换

8

DES加解密原理

8:数据换位置换

把第B-4步形成的32right

DES加解密原理

根据表8进行转换:
  数据的原第16位换到第一位,原第7位换到第二位,……,依此类推,最后得到新的32位数据。

DES加解密原理

3.2.6.   B-6 交换数据

       right left按位异或后的值赋给right,然后将本轮输入的原始right值赋给left

3.2.7.   B-7 迭代

  DES算法需要进行16次迭代,在完成16次迭代前,把第i-1次得到的的leftright的值作为第i次的输入数据,重复第B-3步到第B-6步的步骤。但是有一点要记住:在步骤第B-3中第i次迭代要选择第i次迭代生成的密钥与数据进行按位异或。

B-8 数据整理

9

DES加解密原理

9:数据整理

为保证加密和解密的对称性,DES算法的前15次迭代每完成一次迭代都要交换leftright的值,第16次迭代不交换两者的数值。
  到此,把32位的leftright合并成64位的Data

 

DES加解密原理

 根据表9重新调整Data的位值,数据的原第40位换到第一位,原第8位换到第二位,。。。,依此类推,最后得到新的64位。 

DES加解密原理

 好了,经过了这么多次的数学运算,我们最终得到的Data即为密文。

4.   数据的解密操作

  数据解密的算法与加密算法相同,区别在于第B-3步中和数据进行按位异或的密钥的使用顺序不同,在加密中是按照第i次迭代就采用第i次迭代生成的密钥进行异或,而解密时第i次迭代就采用第17-i次迭代生成的密钥和数据进行异或。

5.   JAVA实现DES加解密

考虑到DES加解密过程的复杂性,jdk提供了相关api(在jce.jar中),后文将会详细介绍。

想了解更多信息请用微信扫描以下二维码关注本人原创公众号,多谢

DES加解密原理



上一篇:DES、AES、RSA等常用加密算法介绍与比较


下一篇:自然语言27_Converting words to Features with NLTK