DES加密算法

文章目录

    • 一、加密流程
    • 二、密钥扩展方案
    • 三、16轮迭代
    • 四、解密流程

一、加密流程

DES加密流程:

  1. 输入64位的明文和64位的密钥
  2. 初始置换IP
  3. 迭代16轮
  4. 初始逆变换IP^-1
    DES加密算法_第1张图片

初始置换IP:通过一个初始IP置换表,得到64bit明文分组的置换,作用就是得到一个乱序的64bit明文分组

DES加密算法_第2张图片
初始逆变换:就是初始变换的逆

DES加密算法_第3张图片
对于初始变换和初始逆变换对于加密的安全性并无帮助。


16轮迭代:

经过初始置换后,将64位明文分为左右两组,各32位,然后进行16轮的迭代
对于每轮迭代:
Li=Ri-1
Ri=Li-1(xor)F(Ri-1,Ki)

DES加密算法_第4张图片
单轮加密变换

DES加密算法_第5张图片

因为采用的是Feistel结构

  • 优点:设计容易,轮函数F不要求可逆
  • 缺点:扩散速度慢;轮变换的输入有一半没有改变;左右块的处理不能并行实施

二、密钥扩展方案

输入的密钥为64bit,但其中有8bit的奇偶校验位(8,16,24,32,40,48,56,64),因此64bit的密钥中只有56bit是有效的。

下图是密钥扩展的整体流程:

DES加密算法_第6张图片


置换选择PC-1:就是将56bit数据打乱重排,例如输入第57bit的数据放在第1位

DES加密算法_第7张图片
对于置换选择PC-1表是如何得到的:将1到64从右到左从上到下依次排列,可以发现奇偶校验位刚好在最下边一行,直接去掉,然后前一半顺序排列57,49,41,33…,后一半数据逆序排列63,55,47,39…,即可得到置换选择PC-1表。

DES加密算法_第8张图片
经过循环置换PC-1后,得到56bit数据,分为两组,每组28bit。

第一轮迭代中,输入C0, D0分别经过循环左移得到C1 ,D1,这一方面作为第二轮输入,另一方面56bitC1 ,D1经过置换选择PC-2筛选出48bit得到第一轮轮秘钥。

下图左边是每一轮左移位数,总共循环移位28次,刚好使得C0=cC6, D0=D16,使下一组加密时不需要对C0, D0进行重新设置

DES加密算法_第9张图片


三、16轮迭代

  1. 扩展置换E
  2. 轮秘钥加
  3. S盒
  4. 置换P

DES加密算法_第10张图片


扩展置换E:作用是为了使输入的32bit数据扩展为48bit然后和子密钥Ki进行异或运算

Ri=Li-1(xor)F(Ri-1,Ki)

扩展置换的方式看下图:

DES加密算法_第11张图片
DES加密算法_第12张图片


轮密钥加:用通过扩展置换E输出的48bit数据和子秘钥Ki进行异或运算,得到输出48bit数据


S盒:

通过轮密钥加得到的48bit数据后,因为要与32bit的Li-1进行异或运算,所以还要经过S盒,将48bit变为32bit

DES加密算法_第13张图片

  • S盒的作用就是将输入的48bit数据压缩为32bit数据,输入的48bit数据被分为8组,每组6bit,每组都要经过一个S盒,总共8个S盒,每个S盒4行16列
  • S盒压缩过程:例如输入的8bit数据为b1b2b3b4b5b6(二进制),b1b6对应的十进制数就是S盒的行号,b2b3b4b5对应的十进制数就是S盒的列号,然后找到对应S盒中的数据,转化为4位二进制输出,即可得到4bit压缩数据

DES加密算法_第14张图片
DES加密算法_第15张图片


置换P

DES加密算法_第16张图片


四、解密流程

DES加密和解密算法相同,不同点仅在于:子秘钥的使用顺序相反,第一轮解密使用K16,以此类推。
DES加密算法_第17张图片

你可能感兴趣的:(算法,DES,密码学)