des

							Web 安全 assignment 1

1. 算法原理概述
a) Des算法可能算法是所有加密算法里面最流行使用的人最多的算法了,主要的原因就是des的创造就贯彻了一个思想就是算法的内容是可以完全公开的(这一点对于des来说还是存疑的,因为sbox是怎么样被构建出来的还是被保密),然后只需要对于密钥进行保密管理,就可以起到非常好的保密效果。贯彻了这个思想就注定des会是一个广为流传的算法,再加上des的原理也并不是很复杂。

b) Des算法具体的实现就是只是最大程度地confusion(混淆)每一个64bit的信息,而对于不同的64bit数据之间就根本不管diffusion(扩散)这件事,因为其实混淆和扩散作为加密的两种保证,当然能够都有是最好的,可以在不同的维度上都对于破解密码的可能性进行大幅度降低。但是其实只要把其中一项做得足够好,让破解的可能性降低到计算层面不可能其实也就足够了。
c) Des相当于就是把混淆做到了极致,所以这才有很多的置换操作,最能够体现混淆的就是sbox的6-4操作了,具体就是把输入的6bit的数据分成m0m5和剩下的bit作为不同的行和列来进行在sbox中进行查找的操作。这种方法造成的混淆,几乎是没有办法可以反向推导出来的。所以想要破解就只能通过枚举的方式来进行破解。但是针对枚举的方法又由增加密钥长度和多次des的解决方法。所以总体来说des还是一个不错的算法(但是在几十年前des已经在比赛中被攻破所以现在是不再推荐使用des了)。
2. 实现的总体结构
首先我要声明的是我自己的c和c++水平不是特别好,因为我对于需要编译的原因不是特别感兴趣,而且有一点是我觉得编程是有目的去编的所以只要编出来就好了,效率什么的根本不需要考虑。自己编出来越快越好。所以我这次实现使用的是pythpn。
a) 首先我在实现这个算法的使用让数据和逻辑分离了,所有涉及到的des的参数table我都放在另一个文件里。另一个文件就是算法的主要部分。
b) 实现的时候主要就是划分成了生成子密钥,置换,sbox的置换,还有就是16次加密迭代这几个部分。然后是down2top来写的。最后整个加密过程和解密过程相当于只是在迭代的时候使用的密钥是相反顺序的而已。

c) 当然其中还涉及要一些比如如果数据没有满64bit为单位,就应该按照rfc的标准来进行最后的补足,比如还差2个byte就在数据的最后添加上“22”,如果正好满64bit就添加“00000000”,这样做的好处就是能够在解密完成之后无需判断迅速能够去除掉不需要的数据。
3. 模块分解
也正如我之前说的是按照down to top来写的,接下来我会贴上这些函数

其中p_transform就是可以复用的置换,只需要提供信息和对应的变换table

Left_circle就是循环左移

这些都是最基础的函数为了功能服务。

着一些则是最基础的为了16次迭代使用轮函数的基础操作

分别是 异或操作和针对sbox的6-4变换

这就是轮函数的操作和每一次跌倒的操作和解密要用的相反的迭代的操作

这就是集合起来的加密解密操作 需要注意的是其中还涉及到把最后结果调换的操作,很容易被忽略

这就是加入了输入输出处理的最后调用的函数

  1. 数据结构
    关于des的参数都是用一维的数据来存的,像sbox可能涉及到取行列的操作也是通过加上行的长度来进行选取的

5. 源代码
源代码直接放在附录中运行 python3 ./myDes.py 并且按照提示进行输入即可

6.结果

输入的是信息的密钥都是12345678
最后可以看到加密之后的密文,并且解密之后也是同样的1234578

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值