DES原理及C语言实现

初始逆置换----->密文

运算中涉及到:子密钥、F函数

下面逐渐细说

目录

一、大致流程

二、细节分析

子密钥的生成

64位密钥变成56位

分为左右两部分

生成子密钥

DES流程图

F函数

扩展置换

密钥加,异或运算

代换盒

置换运算

留言


一、大致流程

初始置换--->进行运算(下面单独)--->初始逆置换----->密文

运算中涉及到:子密钥、F函数

下面逐渐细说

二、细节分析

子密钥的生成

64位密钥变成56位

64密钥经过一个矩阵PC-1进行筛选得到有效56位密钥

分为左右两部分

左边28比特和右边28比特

生成子密钥

首先对左右两部分根据轮数循环左移相应的位数

然后将移位后的左右两部分进行合并成56位,再经过PC-2的置换选择得到48位子密钥

至此,一轮的子密钥的已经生成,下一轮的密钥生成就是利用上一轮的56位继续上面的操作。

DES流程图

1.上面看到,明文首先经过初始置换,然后分为左右两组,各32位。

2.右边一组直接赋给下一轮的左32位,左边一组需要经过运算再赋给下一轮的右32位;

按照上面运算即可,到了16轮之后就结束了,所以16轮时不需要进行交叉赋值,编程时最后我们换下即可

最后初始逆置换就可以得到密文

符号表示

L_{i}=R_{i-1}

R_{i}=L_{i-1}\oplus F(32bitR_{i-1},48bitKey)

初始置换

初始逆置换

F函数

上面子密钥的生成我们介绍过了,下面重点就算是F函数的运算。

F函数接收的参数为右32位和48位子密钥

扩展置换

有个E盒,可以将32位变为48位。

密钥加,异或运算

上面32位经过E盒变为48位后和48位子密钥进行逐位异或运算即可,输出48位

代换盒

上面得到48位数据,然后以6比特一组分成了8组。

每一组b1b2b3b4b5b6,6个比特,此处的b1~b6是左右顺序,不是低高位的标志。

b1b6组成了行值,即行值=b1b6=2*b1+b6

b2b3b4b5组成了列值,即列值=b2b3b4b5=8*b2+4*b3+2*b4+b5

利用上面行列值去其组对应的P盒找相应的值,转换成2进制(由于那个值小于16),所以4比特就可表示。

所以每组经过P盒后由6比特变成4比特,最后组合起来就是4*8=32比特,也就实现了由48比特变成32比特

置换运算

从代换盒出来的32位,再经过P盒的的置换运算,输出的32比特就是F函数的值。

留言

代码后续给出

DES加密与解密代码_des加密解密代码_Tiqer的博客-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值