初始逆置换----->密文
运算中涉及到:子密钥、F函数
下面逐渐细说
目录
一、大致流程
初始置换--->进行运算(下面单独)--->初始逆置换----->密文
运算中涉及到:子密钥、F函数
下面逐渐细说
二、细节分析
子密钥的生成
64位密钥变成56位
64密钥经过一个矩阵PC-1进行筛选得到有效56位密钥
分为左右两部分
左边28比特和右边28比特
生成子密钥
首先对左右两部分根据轮数循环左移相应的位数
然后将移位后的左右两部分进行合并成56位,再经过PC-2的置换选择得到48位子密钥
至此,一轮的子密钥的已经生成,下一轮的密钥生成就是利用上一轮的56位继续上面的操作。
DES流程图
1.上面看到,明文首先经过初始置换,然后分为左右两组,各32位。
2.右边一组直接赋给下一轮的左32位,左边一组需要经过运算再赋给下一轮的右32位;
按照上面运算即可,到了16轮之后就结束了,所以16轮时不需要进行交叉赋值,编程时最后我们换下即可
最后初始逆置换就可以得到密文
符号表示
初始置换
初始逆置换
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函数的值。
留言
代码后续给出