时间:2021/12/20
一.DES算法加密流程
1.加密流程图
如上图所示,DES的明文和密文都以64bit为一个分组,加解密使用同一个算法,只是密钥的使用顺序是相反的,密钥长度为56bit,一共有16轮。
2.加密过程的公式化描述
对于加密过程的每一轮,上一轮的右边保持不变成为下一轮的左边,上一轮的右边和轮密钥作为轮函数的输入,轮函数的输出和上一轮的左边异或后作为下一轮的右边。(注意这里的上一轮指的是下标位i-1的一轮,下一轮指的是下标位i的一轮)
3.子密钥生成算法
子密钥生成:开始的64bit密钥是实际的56bit密钥+8bit奇偶校验位,置换选择1是先去掉了8bit奇偶校验位,然后将剩下的56bit密钥按照置换表的位置重新进行排列。在完成置换选择1后,将56bit密钥分成左右各28bit,然后左右分别循环左移,需要注意不同轮数需要的移位位数是不同的(有一个表格),需要注意的是左右两边是分开进行循环移位的。然后合并左右两边,去掉固定位置的比特,然后根据置换选择2的表格重新进行排列,排列后就可以得到该轮48bit的轮密钥。
4.轮函数(F函数)的实现过程
上图是F函数内部的过程。
5.选择扩展置换E
选择扩展置换:F函数的输入是上一轮的右边和轮函数,由于上一轮的右边为32bit,而轮函数是48bit,所以需要对上一轮的右边进行扩展,从32bit扩展到48bit。方法是将32bit写成8*4的矩阵,然后增加两列,也就是增加16bit,增加两列的内容按照位置下标与相应位置的内容相同。
6.压缩替代(S盒)
压缩替代S盒:在经过选择扩展置换之后,将得到48bit信息与48bit轮密钥进行异或。异或后的信息作为S盒的输入。将输入的48bit分成8组,每组6bit,然后每组的输出为4bit。根据分组号选择相应的S盒,将6bit中的第一个比特位和第六个比特位作为行号,中间4个比特位作为列号,选择一个16进制数字,然后将输入的6bit数字替换成S盒中的4bit数字(一个十六进制数字)。
7.置换(P盒)
置换P盒:上一个S盒的输出32bit作为P盒的输入,按照置换表中的顺序进行置换。
二.DES算法解密流程
1.解密流程图
2.解密算法的公式化表示
解密算法:下一轮的左边不变成为上一轮的右边,下一轮的左边和轮密钥(与加密使用轮密钥次序相反)作为轮函数的输入,轮函数的输出和下一轮的右边异或后作为上一轮的左边。(方便记忆:与加密的左右是相反的)