DES加密详解

DES加密

流程

在这里插入图片描述
DES加密流程:
输入一个64位二进制数明文与一个56位二进制数密钥,64位明文经过初始置换后再被按位数高低分为左半部分与右半部分即L与R,L与R再经过16轮变换后合并并经过逆初始置换生成密文,而56位密钥经过轮密钥生成器生成16个48位子密钥参与L与R的16轮变换。

初始置换与逆初始变换

DES加密的明文是一个64位二进制数。
初始置换:
在将这个64位二进制数按位数高低依次编号(如最高位编号为1,最低位编号为64),依次按编号填入下图中的初始置换表中,这样就进行了一次换位。
由表生成数
以下图初始置换为例,
将表中的数按第一行接第二行再接第三行第四行等等直到最后一行的顺序(及58、50、42、…、10、2、60、52这样的顺序)排列成一个64位二进制数(有多少个数就会排列成多少位的数),这样就将被表置换的数由表的形式变换成数的形式。
在这里插入图片描述
逆初始置换:
同初始置换一样,将经过16轮变换后的明文按位数高低依次编号(如最高位编号为1,最低位编号为64),依次按编号填入上图中的逆初始置换表中,这样又进行了一次换位。
但是,逆初始置换与初始置换是互逆的,即初始置换将明文进行了一次换位,逆初始置换将换位后的64位二进制数变回原来的顺序。(如初始置换将编号为1的二进制数换位到40,而逆初始置换将编号为40的二进制数换位回到1)

48位轮密钥生成器

在这里插入图片描述
这里纠正一下DES加密流程里的陈述,在先前关于加密流程的陈述里是“输入一个64位二进制数明文与一个56位二进制数密钥”,实际上输入的密钥是64位的,只是第8、16、24、32、40、48、56、64位没有采用即将这8位剔除了后变成了56位。

64位密钥经48位轮密钥生成器生成16个48位子密钥流程:
64位密钥经PC-1密钥置换生成C0与D0两个值,C0与D0经过循环移位生成C1与D1,C1和D1经过PC-2压缩置换形成子密钥K1;C1与D1经过循环移位生成C2与D2,C2和D2经过PC-2压缩置换形成子密钥K2…C15与D15经过循环移位生成C16与D16,C16和D16经过PC-2压缩置换形成K16。

PC-1密钥置换

在这里插入图片描述
在输入64位密钥后,与初始置换一样将这个64位二进制数密钥按位数高低依次编号(如最高位编号为1,最低位编号为64),依次按编号填入上图中的两张表中(两张表总和少了8、16、24、32、40、48、56、64这8位),这样就形成了两个28位的值C0、D0。

循环移位

在这里插入图片描述
在DES加密中明文要经过16轮变换,密钥同样也要经过16轮变换(循环左移),但密钥经过一轮变换后除了要再进行变换外还要作为一个子密钥输出参与到明文的变换中。对密钥的16轮变换依次编号1、2、…、16,在密钥的每一轮变换中C与D这两个值所要进行的循环移位(循环左移)的位数是不同的,每一轮变换所要进行的循环移位位数是由上图来决定的。

PC-2压缩置换

在这里插入图片描述
C与D经过循环左移后便生成了下一轮的C与D(如C0与D0经过第一轮变换生成C1与D1),而生成的C和D经过PC-2压缩置换后形成一轮的48位子密钥K(如C1和D1经过压缩置换生成K1参与到明文第一轮变换)。PC-2压缩置换与初始置换一样将C与D合并成的56位二进制数按位数高低依次编号(如最高位编号为1,最低位编号为56),依次按编号填入上图中的表中,第9、18、22、25、35、38、43、54这8位被剔除了,这样就压缩到了48位。

F变换

在明文变换的过程中有一个F变换,如下图:
在这里插入图片描述
F变换流程
F变换中,先32位R值经过扩展变换E盒生成一个48位的值,再与48位轮密钥生成器生成的48位子密钥进行异或运算得到一个48位的值,再经过选择压缩变换S盒生成一个32位的值,再经过置换运算P盒生成一个32位的值。

扩展变换E盒

在这里插入图片描述
先有如上图的4x8的矩阵,再将每一行的第一个编号加入到上一行的末尾、每一行的最后一个编号放到下一行的开头(第一行的第一个加入到最后一行的末尾,最后一行的最后一个放到第一行的开头),如下图:
在这里插入图片描述
这样就形成了扩展变换盒E。
同样的将32位二进制数R值按位数高低依次编号(如最高位编号为1,最低位编号为32),依次按编号填入上图中的扩展变换E表中生成一个48位的值。

选择压缩变换S盒

S盒有S1、S2、…、S8共八个,如下图:
在这里插入图片描述
扩展E盒生成的48位值与轮密钥生成的48位子密钥异或生成一个48位值,将这个48位值按位数高低分成6位一组的8个6位二进制数,最高6位的组成的6位二进制数对应S1盒,接下来的6位组成的6位二进制数对应S2盒,接下来的数也对应相应的S盒。以S1盒为例:设48位值最高6位为010101,将该6位二进制数最高位与最低位组成一个两位二进制数01(十进制数1)作为选择S1盒的行数,将该6位二进制数的中间4位1010(十进制数10)作为选择S1盒的列数,
在这里插入图片描述
010101[行数01(1),列数1010(10)]对应S1盒1行10列的12,12转成二进制是1100,其他7个6位二进制数也在相应的S盒中找到相应的数再转换成4位二进制数(在S盒中十进制数转换成的二进制数不超过4位)后再合并成一个32位值,这样一共8个6位二进制数转换成4位二进制数就将48位值压缩成了32位值。

置换运算P

在这里插入图片描述
将经由选择置换S盒生成的32位值按位数高低依次编号(如最高位编号为1,最低位编号为64),依次按编号填入上面的表中,这样由置换运算P生成的32位值就是经过F变换最终生成的32位值。

明文变换

在这里插入图片描述
由初始置换生成L0与R0,在16轮明文变换中R作为下一轮变换的L并与K经过F变换后与L异或生成下一轮的R,这样就生成了下一轮的L与R。
经过16轮这样的变换之后再经过逆初始置换就得到了最后的密文。

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值