1.DES特点
(1)是对称加密算法
(2)56位密钥进行加密。(原有64位,其中有8位校验位)
(3)对明文块进行加密,以64位为一个块,不足64填充为64,超过64,以分组模式进行分组加密
2.DES加密流程
(1)首先把64位的明文进行初始IP置换(把64位明文按照规定的置换表进行排序),然后分成L0和R0两个部分,每个部分32位
(2)把32位的明文和密钥一起重复16轮f轮函数(E扩展置换,异或运算,S盒压缩,P盒置换)运算
a. F函数
E扩展置换
首先R0的32位参与F轮函数运算,由于后来要与48位子密钥异或,R0也需要48位
具体扩展方法:
先把R0 按4*8的格式排列为一个表
对这个表的左右两列进行位置变换得到下表(置换表固定)
现在把R0扩展为48位了,这是的数据都还是原R0的数据
子密钥K的生成
主密钥是64位,每轮的子密钥都是由主密钥通过密钥调度算法(Key Schedule Algorithm)生成的。(把64位主密钥分成16个子密钥,每个子密钥48位)
具体过程:
主密钥先进行置换选择1(PC-1)
目的通过PC-1置换来去除8个校验位,再把其余的56位打乱排序,这时置换就完成了
然后把密钥分成左右各28位,左C0,右D0
创建16个块Cn和Dn
对于1<=n<=16,在第n轮分别对Cn-1和Dn-1进行循环左移,所移的位数为1位或者2位,取决于n的值,当n=1,2,9,16时左移1位,其它左移2位,
最后得到C1到C16,D1到D16
然后就得到16个子密钥K
Kn = PC_2(CnDn)
从 CnDn 中选取48 位作为子密钥Kn,CnDn 表示从左到右将 Dn 排在 Cn 的后面(CnDn 的长度为56 位)然后子密钥就全部生成了。
异或
把E(A)(48位R0)与48位K1进行异或,以此类推异或,直到把16组都异或结束
S盒压缩
然后把异或之后的结果分成8组,一组六位,分别对每一个组进行S盒压缩,经过S盒每一组缩短为4位。
S盒的行号从0到3,列号从0到15。
行号:以此取数据,例如我们取第一组数据(对应S1)有六位,第一位和最后一位组合在一起再转化为十进制就是行号
列号:还是拿第一组(S1)举例子,取剩下的四位转化成十进制作为列号
即S1对应的行号列号就知道了,在S1置换表中找这个行这个列所对应的十进制数字,把这个十进制转换成二进制,这个值就是第一组数据经过S盒压缩之后的最终的输出
下边就是S盒的置换表:
P盒置换
经过S盒置换后剩余32位,然后进行P盒置换,他是固定置换,根据置换表置换即可
这时候F函数就运算结束
b.轮函数
,然后合并在一起,得到64位轮函数的结果
(3)逆初始置换IP^{-1}
把最终结果按照下表进行最终置换即得到密文
3.DES解密(后续做题会写详细过程)
解密与加密过程相同,但是在16次迭代时使用的子密钥的次序正好相反。
解密时,第一次迭代用子密钥K_{16}....第十六次用子密钥K_{1}
4. 3DES
三重DES就是使用3次DES运算,密钥长度增加到112 bit或168 bit