DES加密算法

一、加密流程

DES加密流程:

  1. 输入64位的明文和64位的密钥
  2. 初始置换IP
  3. 迭代16轮
  4. 初始逆变换IP^-1
    在这里插入图片描述

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

在这里插入图片描述
初始逆变换:就是初始变换的逆

在这里插入图片描述
对于初始变换和初始逆变换对于加密的安全性并无帮助。


16轮迭代:

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

在这里插入图片描述
单轮加密变换

在这里插入图片描述

因为采用的是Feistel结构

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

二、密钥扩展方案

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

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

在这里插入图片描述


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

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

在这里插入图片描述
经过循环置换PC-1后,得到56bit数据,分为两组,每组28bit。

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

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

在这里插入图片描述


三、16轮迭代

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

在这里插入图片描述


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

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

扩展置换的方式看下图:

在这里插入图片描述
在这里插入图片描述


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


S盒:

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

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述


置换P

在这里插入图片描述


四、解密流程

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

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值