本文主要是介绍des子密钥生成和子密钥逆推原始密钥,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
工具
#为了便于运算,将原来的PC1和PC2都减了1
PC1=[56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3]
PC2=[13, 16, 10, 23, 0, 4, 2, 27, 14, 5, 20, 9, 22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1, 40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47, 43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31]
movnum = [1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1]#对应16轮中每一轮的循环左移位数
过程
注
原始密钥为64位
去除校验位后56位(校验位在每bytes的第八位)
经过pc-2置换后剩余48位
逆推K
取第一轮子密钥生成为例记子密钥为key1.
- pc-2逆置换
pc-2置换过程是56位至48位的过程,因此其中有些bit丢弃了.我们首先假设置换前的为CD1=['*']*56
这样通过逆置换CD1[PC2[i]]=key1[i]
于是还剩8个未知的bit
记这8个比特位分别为 a b c d e f g h 将CD1继续进行子密钥的生成过程得到key2
这时如果我们知道key2的值那么就基本可以将 a b c d e f g h给一一对应求出来.
2.循环左移逆运算
C1 = CD1[:28]D1 = CD1[28:]C1 = C1[-1:] + C1[:-1]D1 = D1[-1:] + D1[:-1]CD1=C1+D1
3.pc-1逆置换
4.爆破奇偶校验位
这篇关于des子密钥生成和子密钥逆推原始密钥的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!