加密算法–DES对称加密算法详解

一、什么是DES算法?
二.、DES算法是怎么加密的?
三、加密具体过程?

  一 、下面来回答第一个问题:什么是DES算法?

  DES(Data Encryption Standard,即数据加密标准),是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。

   二、接下来回答第二个问题:DES算法是怎么加密的?

  DES是将明文按64位进行分组,密钥长64位,密钥是利用56+8奇偶校验位(第8,16,24,32,40,48,56,64)=64位的密钥对以64位为单位的块数据进行加解密。参与DES运算(第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组。

  DES算法的加密密钥是根据用户输入的密码生成的,该算法把64位密码中的第8位、第16位、第24位、第32位、第40位、第48位、第56位、第64位作为奇偶校验位,在计算密钥时要忽略这8位.如果输入的密码只是在这8位上有区别的话,那么操作后的结果将是一样的.

DES加密算法和3DES加密算法的Python实现 des加密算法实例_c++


  DES是一种对称密码,加密过程和解密过程使用相同的密钥。DES是一种迭代算法。DES对明文中的每个分组的加密都包含16轮,且每轮的操作完全相同。每轮都会使用不同的子密钥,并且子密钥Ki都从主密钥推导而来。

DES加密算法和3DES加密算法的Python实现 des加密算法实例_c++_02


  三、第三个问题: 加密具体过程?

   DES算法的步骤,包括IP置换、密钥置换、E扩展置换、S盒代替、P盒置换和逆初始置换IP-1

DES加密算法和3DES加密算法的Python实现 des加密算法实例_数据结构_03


   3.1、IP置换与逆初始置换IP-1

  3.1.1、IP置换

  IP置换:根据置换表哥将输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位。

DES加密算法和3DES加密算法的Python实现 des加密算法实例_数据结构_04


说明:(1)表格从左到右,从上到下地阅读。数字代表新数据中此位置的数据在原数据中的位置,即原数据块的第58位放到新数据的第1位,第50位放到第2位,……依此类推,第7位放到第64位。

(2)置换后的数据分为L0和R0两部分,L0为新数据的左32位,R0为新数据的右32位。

(3)位数是从左边开始数的,即最0x0000 0080 0000 0002最左边的位为1,最右边的位为64。

3.1.2、逆初始置换IP-1

  逆初始置换IP-1:初始置换的逆过程,DES最后一轮后,左、右两半部分并未进行交换,而是两部分合并形成一个分组做为末置换的输入。

DES加密算法和3DES加密算法的Python实现 des加密算法实例_人工智能_05


  3.2、密钥置换

 e (1)每个字节的第8位是奇偶校验位,DES的密钥由64位减至56位,每个字节的第8位作为奇偶校验位。产生的56位密钥由下表生成(注意表中没有8,16,24,32,40,48,56和64这8位):

DES加密算法和3DES加密算法的Python实现 des加密算法实例_数据结构_06


  (2)在DES的每一轮中,从56位密钥产生出不同的48位子密钥,确定这些子密钥的方式如下:

  1).将56位的密钥分成两部分,每部分28位。

  2).根据轮数,这两部分分别循环左移1位或2位。每轮移动的位数如下表:

DES加密算法和3DES加密算法的Python实现 des加密算法实例_数据结构_07


  (3)移动后,从56位中选出48位。这个过程中,既置换了每位的顺序,又选择了子密钥,因此称为压缩置换。压缩置换规则如下表(注意表中没有9,18,22,25,35,38,43和54这8位):

DES加密算法和3DES加密算法的Python实现 des加密算法实例_算法_08


  3.3、扩展置换E

  扩展置置换目标是IP置换后获得的右半部分R0,将32位输入扩展为48位(分为4位×8组)输出。

  扩展置换目的有两个:生成与密钥相同长度的数据以进行异或运算;提供更长的结果,在后续的替代运算中可以进行压缩。

DES加密算法和3DES加密算法的Python实现 des加密算法实例_算法_09


  表中的数字代表位,两列黄色数据是扩展的数据,可以看出,扩展的数据是从相邻两组分别取靠近的一位,4位变为6位。靠近32位的位为1,靠近1位的位为32。表中第二行的4取自上组中的末位,9取自下组中的首位。

  3.4、S盒变换

  压缩后的密钥与扩展分组异或以后得到48位的数据,将这个数据送人S盒,进行替代运算。替代由8个不同的S盒完成,每个S盒有6位输入4位输出。48位输入分为8个6位的分组,一个分组对应一个S盒,对应的S盒对各组进行代替操作。

DES加密算法和3DES加密算法的Python实现 des加密算法实例_c++_10


  一个S盒就是一个4行16列的表,盒中的每一项都是一个4位的数。S盒的6个输入确定了其对应的输出在哪一行哪一列,输入的高低两位做为行数H,中间四位做为列数L,在S-BOX中查找第H行L列对应的数据(<32)。

  8个S盒如下:

  S盒1

  

DES加密算法和3DES加密算法的Python实现 des加密算法实例_c++_11

S盒2

DES加密算法和3DES加密算法的Python实现 des加密算法实例_数据结构_12


S盒3

DES加密算法和3DES加密算法的Python实现 des加密算法实例_c++_13


S盒4

DES加密算法和3DES加密算法的Python实现 des加密算法实例_算法_14


S盒5

DES加密算法和3DES加密算法的Python实现 des加密算法实例_算法_15


S盒6

DES加密算法和3DES加密算法的Python实现 des加密算法实例_数据结构_16


S盒7

DES加密算法和3DES加密算法的Python实现 des加密算法实例_算法_17


S盒8

DES加密算法和3DES加密算法的Python实现 des加密算法实例_数据结构_18


(1)注意,S盒的行列计数都是从0开始。

(2)代替过程产生8个4位的分组,组合在一起形成32位数据。

(3)S盒代替时DES算法的关键步骤,所有的其他的运算都是线性的,易于分析,而S盒是非线性的:S(a)⊕S(b)≠S(a⊕b),相比于其他步骤,提供了更好安全性。

(4)每一个S-盒都有6个输入位和4个输出位。

(5)任意一个输出位都不应该太接近于输出位的线性组合。

(6)如果输入位的最高位和最低位是固定的,只有中间的4个是可变的,则每个可能的4位输出值都必须只出现一次。

(7)对于S-盒的两个输出,如果仅有1位不同,则输出至少有两位不同。

(8)对于S-盒的两个输出,如果中间的2位不同,则输出必须至少2位不同。

(9)对于S-盒的两个输出,如果开头2位不同,但最后2位相同,则输出必须不同。

(10)对于S任意有6位非零差分的输入对,32位输入中至多有8对有相同的输出差分

(11)8个S-盒对应的32位输出的冲突(零输出差异)只有在3个相邻的S-盒的情况下才有可能。

  3.5、P盒变换

  S盒代替运算的32位输出按照P盒进行置换。该置换把输入的每位映射到输出位,任何一位不能被映射两次,也不能被略去,映射规则如下表:

DES加密算法和3DES加密算法的Python实现 des加密算法实例_算法_19

   最后,P盒置换的结果与最初的64位分组左半部分L0异或,然后左、右半部分交换,接着开始另一轮。