虽然比着那个DES加密类写出了DES的demo,但是心中的疑云并没有减少,相反,随着不断的深入,不断的加重。本来以为之前花了2天来搞定了demo,就已经懂了许多,但今天中午开始的琢磨,又让我更加苦恼了。
对于DES密钥的产生过程有些困惑。有的说,是对初始的64个bit的密钥,去掉每个字节的第8位。有的是一开始就用56bit的密钥,然后根据每7位 中的1的奇偶个数来增加1位,扩充到64位后再用置换表(pc-1)来缩减到56位。然后之后的循环操作等就都是一样了。这样用到的表都是一样的,产生的 密钥我测试了,不同啊。这点让我困惑不已。看来,密钥的产生是可以多种思路的。
“每个字节的第8位为奇偶校验位。不参与运算。”
上述2种产生方法里。
先考虑后者。假如原始key为 science 。对应的为 73 63 69 65 6e 63 65 。然后转为二进制后,按每7个进行分组,分得8组,然后假如奇偶校验位,然后打乱(就是置换选择PC表)最后就出现了那个神奇的56bit的密钥,接着是 循环,然后再打乱(这里是压缩选择CP表)。
第一轮出现的结果是2d d8 ce 37 7f 40
考虑前者的情况。假如原始key为science。因为不足8个bit,所以会补0。然后这个比较方便,直接按照PC表来。其实,仔细观察表,里面舍弃的就是每个字节第8位的那个值。然后也是利用压缩表来压缩到48bit。
第一轮出现的结果是e0 be 03 3f 03 80
当然,其实无所谓哪种思路来产生密钥,只要加密和解密双方使用同样的产生密钥的方法就OK了。(前提是使用对称式加密)。在深入捣鼓DES的时候,受到了不少的挫折,但也对基础知识的了解增加了不少。