第三周
DES
DES是一种用于加密数字数据的对称密钥算法是一种采用固定长度的明文位串并通过一系列复杂操作将其转换为另一个相同长度的密文位串的算法。在 DES 的情况下,块大小为 64 位。
这是一张DES的加密流程图由此就可以看出DES的加密主要为以下几步
1.明文的输入
2.ip置换,这里要用到P盒IP置换的原理为将64位的明文按对应的位置重新组合。类似于
将原文的第58位放在第一位50位放在第二位以此类推
3.将置换的原文一分为二分别去加密先由右半部分和密匙k1通过f函数加密,再将这一步的结果去和左边进行异或来得到最终加密完毕的右半部分。
4.将加密的右边和没有加密的左边置换位置。由左边充当下一轮加密的右边继续重复以上加密过程
除了主要的加密过程,还有一些特殊的加密函数
f函数
f函数就是加密过程中加密右边和k的函数具体由四部分构成
1.E盒扩展
在E盒中要将原本的右边的32bit扩展为48bit去产生与秘钥相同长度的数据以进行异或运算E盒的原理盒P盒十分类似
就像这样按表将对应的位置上的数字放入就能得到相应的扩展后的明文
2.与k异或
k并不是密匙,而是子密钥,密钥是64位将校验的位置去掉(8位校验位是8,16,24,32,40,48,56,64)还剩下56位但和48位还是不一样这时候就要进行一个16轮的加密得到48位的子密钥
3.s盒压缩
异或之后我们得到的还是48位,不能直接去进行接下来的运算,于是需要S盒,S盒的运行原理是将48位的密文平均的分位8组每六位一组,接下来取出每一组中的前后俩位,和中间四位。前俩位二进制数转换为十进制数,中间四位二进制转换为16进制于是就可以去对应S盒的数字了
将对应数字转换为二进制就可以得到压缩后结果了
4.ip置换
于第一次的ip置换的区别只有P盒内容不一样了具体过程一样
子密钥
之前提到的k的生成过程就是
第一步是先去除校验位这里要用到PC-1盒(置换选择器1)并将得到的56位密钥顺序打乱
将得到的58位数为俩个28位,先要将这俩组28位数都进行一次左移并整合起来(要对应左移表)但是左移后的密钥仍然是56位,接下来还要通过置换选择器2(PC-2)和之前一样选择,置换,打乱,输出。(一般会选出9,18,22,25,35,38,43,54)
这个过程会重复16次去产生16个密钥 对应16轮的加密过程
看看代码
代码很重要的一部分是每个步骤中出现的盒要先把他们提供出来
#数据的初始置换矩阵
PI = [ 58 , 50 , 42 , 34 , 26 , 18 , 10 , 2 ,
60 , 52 , 44 , 36 , 28 , 20 , 12 , 4 ,
62 , 54 , 46 , 38 , 30 , 22 , 14 , 6 ,