des加密去掉特殊字符_DES加密算法实现

5cd54e194ff4b467db51ee63241aa0b5.png

最近一直在学习网络安全中数据加密与认证技术,不过一开始看着原理,就总觉得不太直观。就觉得这个应该可以用代码实现一下,顺便也体验一波数据加密的感受。下面简单介绍一下什么是DES算法,怎么用代码实现。

DES是一个分组加密算法,它以64位为分组对数据加密。64位一组的明文从算法的一端输入,64位的密文从另一端输出。DES是一个对称算法:加密和解密用的是同一算法。密钥的长度为56位。( 密钥通常表示为64位的数,但每个第8位都用作奇偶校验,可以忽略,但写程序时为了统一,还是采用64为密钥,但经过密钥置换操作后,就会去除掉其中的奇偶校验位)密钥可以是任意的56位的数,且可在任意的时候改变。其中极少量的数被认为是弱密钥,但能容易地避开它们。所有的保密性依赖于密钥。

f7bbd1ab58997ad0941873d3fd650489.png
总体加密过程图

可以发现DES每一轮的操作都是一致的,也就是他的操作十分简便。我们要关注的就是两点,如何产生16个子密钥,如何利用子密钥对明文进行操作。

产生子密钥:

db20c66d732c2a726c4b4ae21c0a3a02.png
产生子密钥示意图
首先进行密钥置换:按照密钥置换表进行密钥置换,经过密钥置换后,64位密钥会去掉8位校验位,同时打乱原先的顺序。

433ca78540218209eb5cad1d87a1c987.png
教材表6-3密钥置换表

可以发现,该表中的数据代表原先64位密钥的原来的位置,比如原来的57位现在在第1位。

该表一共有14*4=56位,其中没有出现(8、16、24、32、40、48、56、64)这8个校验位,因此经过密钥置换后,实现了我上面说的功能!

然后,把56位密钥进行划分成两份C:28位,D:28位,同时对这两部分按照移位表根据轮数进行循环左移1位或者2位。

8d1983f7c231fe4107116335df604ea5.png
教材表6-4
接下来可以看到,C和D一方面移位后直接合在一起作为下一轮密钥(56位)的输入,另一方面则进行压缩置换操作:按照压缩置换表进行变换,使得56位密钥变为48位密钥。

2463a1941c43323a23eaf730f7c9824c.png
教材6-5压缩置换表(48位)

可以发现,压缩置换利用的就是选择+置换,从56位选出48个位,同时把他们打乱顺序。

利用每轮子密钥对明文进行处理:

f5daa9c4cf94286fe22ff32811434791.png
处理明文流程图
明文首先会进行初始置换,按照初始置换表进行打乱64位明文顺序

bd8fe2ddc0ec1be9479000c9bc41e54f.png
教材表6-2初始置换表
然后将明文分为L和R两部分,32位,同时对R进行扩展置换,使32位R变成48位,以便下面的异或操作

6b3eae011d25fa968246f6f06d9123d1.png
扩展置位操作原理图

bb70ce42349cd320ffec82888f97d1c4.png
教材表6-6 扩展置换表
接下来与子密钥异或后,R还需要进行S-盒替代,其实就是运用8个替代表进行替代,输入是48位(68),输出是32位(4*8),其实就是4位数替代了6位数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值