DES算法过程

DES加密过程

一、DES算法介绍

​ DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与作为标准的DES区分开来。

二、DES算法的完整过程

在这里插入图片描述

三、密钥处理

​ DES算法会先对64位密钥进行处理生成48位子密钥后再参与到算法的轮操作中,在每一轮的迭代过程中,使用不同的子秘钥。其中的处理包括置换选择、循环左移、压缩置换。
在这里插入图片描述

1、置换选择

​ 不考虑每个字节的第8位,DES的密钥由64位减至56位,每个字节的第8位作为奇偶校验位。产生的56位密钥由下表生成(注意表中没有8,16,24,32,40,48,56和64这8位),并将置换后的56位密钥分成两部分C0(28位)和D0(28位),每部分28位:

注意:这里的数字表示的是原数据的位置,不是数据
在这里插入图片描述

例:

k= 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001

根据选择置换PC-1表将这64位转换为56位
k+= 1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111

将置换后的56位密钥分成两块C0(28位)和D0(28位)
C0= 1111000 0110011 0010101 0101111
D0= 0101010 1011001 1001111 0001111
2、循环左移

​ 将C0和D0进行循环左移变化(注:每轮循环左移的位数由轮数决定(如下图)),变换后生成C1和D1,然后C1和D1合并。
在这里插入图片描述

例:

第一步置换后的C0和D0
C0= 1111000 0110011 0010101 0101111
D0= 0101010 1011001 1001111 0001111
第一轮根据上表可以查出应左移一位得到
C1= 1110000 1100110 0101010 1011111
D1= 1010101 0110011 0011110 0011110
将左移后的C1、D1合并
C1D1 = 1110000 1100110 0101010 1011111 1010101 0110011 0011110 0011110
3、压缩置换

​ 移动后,从56位中选出48位。这个过程中,既置换了每位的顺序,又选择了子密钥,因此称为压缩置换。压缩置换规则如PC-2表(注意表中没有9,18,22,25,35,38,43和54这8位)
在这里插入图片描述

例:

左移后
C1D1 = 1110000 1100110 0101010 1011111 1010101 0110011 0011110 0011110
根据PC-2表将左移后的密钥压缩成48位
K1= 000110 110000 001011 101111 111111 000111 000001 110010

​ 压缩置换后的48位子密钥将参与到轮操作中,而C1、D1也将再进行左移和置换后得到下一轮的子密钥

四、明文处理

​ 传进来的明文将经过置换IP、轮操作、逆行置换IP等操作得到密文。

1、置换IP

​ IP置换目的是将输入的64位明文M按位重新组合,并把输出分为L0、R0两部分,每部分各长32位。置换规则如下表所示:
在这里插入图片描述

​ 表中的数字代表新数据中此位置的数据在原数据中的位置,即原数据块的第58位放到新数据的第1位,第50位放到第2位,……依此类推,第7位放到第64位。置换后的数据分为L0和R0两部分,L0为新数据的左32位,R0为新数据的右32位。

例:

M= 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
根据上面的置换表得到的结果
IP= 1100 1100 0000 0000 1100 1100 1111 1111 1111 0000 1010 1010 1111 0000 1010 1010
将置换后的结果分为两部分L0、R0
L0= 1100 1100 0000 0000 1100 1100 1111 1111
R0= 1111 0000 1010 1010 1111 0000 1010 1010
2、轮操作

​ 经过置换IP后的L0、R0会经过16轮的相同操作,每一轮都会有一个上面密钥处理后的不同子密钥参与。

​ 轮操作包括:扩展置换、与子密钥异或、压缩置换、置换、与另一部分进行异或
在这里插入图片描述

2.1、扩展置换

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

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

扩展置换规则如下表:
在这里插入图片描述

​ 中间白色框部分表示置换后的明文两部分中的右半部分的位置信息,两列黄色数据是扩展的数据。例:第1位边上的32就是将第32位上的值复制一份到第1位的边上。

例:

明文经过置换后的右半部分如下所示
R0= 1111 0000 1010 1010 1111 0000 1010 1010
通过扩展规则得到如下数据
E(R0)= 011110 100001 010101 010101 011110 100001 010101 010101

​ 扩展置换之后,右半部分数据R0变为48位,与密钥置换得到的轮密钥进行异或。

2.2、压缩置换(S盒代替)

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

​ 一个S盒就是一个4行16列的表,盒中的每一项都是一个4位的数。S盒的6个输入确定了其对应的输出在哪一行哪一列,输入的高低两位做为行数H,中间四位做为列数L,在S-BOX中查找第H行L列对应的数据(<32)。示例如下:S盒的6位输入为101100,取最高位及最低位得到的值10转换为十进制为2,除去最高位及最低位的四位数字组成0110转换为十进制为6,则S盒的输出为行号为2列号为6所对应的值2的二进制0010
在这里插入图片描述
在这里插入图片描述

2.3、P盒置换

​ 与上面提到的置换相同,S盒代替运算的32位输出按照P盒进行置换。该置换把输入的每位映射到输出位,任何一位不能被映射两次,也不能被略去,映射规则如下表:
在这里插入图片描述

​ 表中的数字代表原数据中此位置的数据在新数据中的位置,即原数据块的第16位放到新数据的第1位,第7位放到第2位,……依此类推,第25位放到第32位。

例:

原数据= 0001 0000 1010 0001 0000 0000 0000 0001
替换后的值= 1000 0000 0000 0000 0000 1000 1000 0110

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

3、左右32bit交换

​ 16轮替代之后会得到最后的结果L16、R16,最后将两组数据进行左右两组交换。

例:

L16= 0100 0011 0100 0010 0011 0010 0011 0100
R16= 0000 1010 0100 1100 1101 1001 1001 0101

本应该是L16R16交换后变为R16L16
R16L16= 0000 1010 0100 1100 1101 1001 1001 0101 0100 0011 0100 0010 0011 0010 0011 0100
4、逆置换

​ 将左右32位交换后的结果再进行一次逆置换,逆置换是初始置换IP的逆过程。逆置换规则如下表:
在这里插入图片描述

例:

R16L16= 00001010 01001100 11011001 10010101 01000011 01000010 00110010 00110100
进行逆置换之后
IP-1= 10000101 11101000 00010011 01010100 00001111 00001010 10110100 00000101
R16L16= 00001010 01001100 11011001 10010101 01000011 01000010 00110010 00110100
进行逆置换之后
IP-1= 10000101 11101000 00010011 01010100 00001111 00001010 10110100 00000101

最后得到的即为密文。

参考文档:DES算法详解
参考视频:【作业】DES加密过程讲解

  • 40
    点赞
  • 176
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值