DES加密算法详解

DES加密

DES加密算法要经过16轮加密,本次例题只计算第一轮加密过程。

1、初始置换

在得到一个16位16进制数(64位2进制数,若是16位16进制数将其转换为64位2进制数)的明文。根据初始置换表进行置换得到一个新的64位2进制数,将其分为两部分前32位是L0,后32位是R0。

2、扩展R0

需要将32位的R0扩展至48位,方便与秘钥进行异或运算。32位R0分为8组,一组4位,

扩展方法:将8组按照阶梯式摆放,上下不存在重复,如下图所示

将第一组的最后一位写一个在第二组第一位的前面,将第二组的第一位写一个在第一组的最后。扩展结果如下图

第一组的最前面的0是最后一组的最后一位。最后一组的最后一位是第一组的第一位。

3、秘钥

1.1 初始秘钥

最初得到一个64位2进制的秘钥,经过秘钥置换表1,压缩置换之后会得到56位的子密钥K0。

1.2 秘钥偏移

将56位的K0分为两部分,第一部分28位是C0,第二部分28位是D0,经过循环左移表进行左移,然后拼接C0D0,得到新的K0,

1.3 再次置换

将新的K0根据秘钥置换表2,进行再次压缩置换,得到48位的K1,即本轮加密所用子密钥。

4、异或运算

将上述得到R0与得到子密钥K1,进行异或运算得到48位2进制的新数据R0。

5、 S盒替换

将新数据R0根据S盒替换表,进行替换,会得到32位的2进制数据。

替换方法:将48位数据分为一组6位,总共8组,分别对应8个S盒。一组中6位2进制数据,第一位和最后一位会得到所在行数,中间4位转换为10进制数,即所在列数,得到所在行数、列数,对照相应的S盒替换表,即可得到一个十进制数,再讲其10进制数转为4位2进制数。8组替换结束就可以得到32位的数据,

6、 P盒替换

将经过S盒替换得到的32位数据根据P盒进行再次置换排列,得到新的32位数据

7、 赋值

将经过P盒置换得到32位数据与最初前32位数据L0进行异或运算,得到的就是R1,将最初分片得到R0赋值给L1。第一轮密文就是(R1L1),在对其进行15轮加密计算。

8、逆置换

将经过16轮加密计算得到密文,经过逆初始置换表置换,得到最后的密文。

DES加密案例

题目:0X0123456789ABCDEF,转换为2进制即为 00000001 00100011 01000101 01100111 10001001 10101011 11001101 11101111

秘钥:0X133457799BBCDFF1,转换为2进制数即为 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001

1、初始置换

根据表进行第一次置换,得M

M=11001100 00000000 11001100 11111111 11110000 10101010 11110000 10101010

分为两部分L0、R0。得

L0=11001100 00000000 11001100 11111111

R0=11110000 10101010 11110000 10101010

2、扩展R0

将第一组的最后一位写一个在第二组第一位的前面,将第二组的第一位写一个在第一组的最后。扩展结果如下图

扩展之后结果为

E(R0)48=01111010 00010101 01010101 01111010 00010101 01010101

3、秘钥

1.1 初始秘钥

00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001

根据交换规则表进行压缩置换得

56位二进制数

K0=11110000110011001010101011111111000011001100101010101111

1.2 秘钥偏移

将56位的K0分为两部分,第一部分28位是C0,第二部分28位是D0,

C0= 11110000 11001100 10101010 1111

D0= 01010101 01100110 01111000 1111

经过循环左移表进行左移,得到

C1=1110000 11001100 10101010 11111

D1=1010101 01100110 01111000 11110

然后拼接C0D0,得到新的C1D1

C1D1=11100001100110010101010111111010101011001100111100011110

1.3 再次置换

压缩置换之后得到48位的K1

K1(48)= 00011011 00000010 11101111 11111100 01110000 01110010

4、异或运算

将上述得到R0与得到子密钥K1,进行异或运算得到48位2进制的新数据R0。

E(R0)48=01111010 00010101 01010101 01111010 00010101 01010101

K1(48)= 00011011 00000010 11101111 11111100 01110000 01110010

异或之后得到

R0(48)=01100001 00010111 10111010 10000110 01100101 00100111

5、 S盒替换

对得到R0进行分组

011000

010001

011110

111010

100001

100110

010100

100111

然后根据S盒表进行替换

得到32位的数据

Ms(32)=01011100100000101011010110010111

6、 P盒替换

将经过S盒替换得到的32位数据根据P盒进行再次置换排列,得到新的32位数据

F= 00100011 01001010 10101001 10111011

7、 赋值

R1=L0异或F=11101111 01001010 01100101 01000100

L1=R0=11110000 10101010 11110000 10101010

拼接得到密文

M1=11101111 01001010 01100101 01000100  11110000 10101010 11110000 10101010

M1=(EF4A6544F0AAF0AA)16

若有问题欢迎评论、私信提出!!!

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无_欲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值