DES算法及其在VC++6.0下的实现(下)
作者:航天医学工程研究所四室 朱彦军 在《DES算法及其在VC++6.0下的实现(上)》中主要介绍了DES算法的基本原理,下面让我们继续:
该比特串分为长度相等的比特串C0和D0。然后C0和D0分别循环左移1位,得到C1和D1。C1和D1合并起来生成C1D1。C1D1经过PC-2变换后即生成48比特的K1。K1的下标列表为:
C1、D1分别循环左移LS2位,再合并,经过PC-2,生成子密钥K2……依次类推直至生成子密钥K16。 注意:Lsi (I =1,2,….16)的数值是不同的。具体见下表:
for(i=1;i<57;i++)//输入64位K,经过PC-1变为56位 k0[i]=k[PC_1[i-1]]; 56位的K0,均分为28位的C0,D0。C0,D0生成K1和C1,D1。以下几次迭代方法相同,仅以生成K8为例。 for(i=1;i<27;i++)//循环左移两位 { C8[i]=C7[i+2]; D8[i]=D7[i+2]; } C8[27]=C7[1]; D8[27]=D7[1]; C8[28]=C7[2]; D8[28]=D7[2]; for(i=1;i<=28;i++) { C[i]=C8[i]; C[i+28]=D8[i]; } for(i=1;i<=48;i++) K8[i]=C[PC_2[i-1]];//生成子密钥k8注意:生成的子密钥不同,所需循环左移的位数也不同。源程序中以生成子密钥 K8为例,所以循环左移了两位。但在编程中,生成不同的子密钥应以Lsi表为准。
|
最新评论 [发表评论] [文章投稿] | 查看所有评论 推荐给好友 打印 |
谢谢! ( simon_2008 发表于 2006-7-4 12:40:00) K9:0x1f5bdb 449554 0001 1111 0101 1011 1101 1011 0100 0100 1001 0101 0101 0100 K10:0x3f79dd 9a4ec 0011 1111 0111 1001 1101 1101 0000 1001 1010 0100 1110 1100 K11:0x1f6dcd 68dc81 0001 1111 0110 1101 1100 1101 0110 1000 1101 1100 1000 0001 K12:0x5b6dbd 0a443f 0101 1011 0110 1101 1011 1101 0000 1010 0100 0100 0011 1111 K13:0xddadad 8f5980 1101 1101 1010 1101 1010 1101 1000 1111 0101 1001 1000 0000 K14:0xd3aeaf 804371 1101 0011 1010 1110 1010 1111 1000 0000 0100 0011 0111 0001 K15:0xf9bea6 d38a04 1111 1001 1011 1110 1010 0110 1101 0011 1000 1010 0000 0100 K16:0xf1be2e 01825e 1111 0001 1011 1110 0010 1110 0000 0001 1000 0010 0101 1110 ( imflying 发表于 2005-5-6 21:47:00) 接着,我想补完本文的K子密钥,应该是48bit,本文是32 K1:0xf0beee d00798 1111 0000 1011 1110 1110 1110 1101 0000 0000 0111 1001 1000 k2:0xe0bef6 95b484 1110 0000 1011 1110 1111 0110 1001 0101 1011 0100 1000 0100 k3:f4fe76 2806e5 1111 0100 1111 1110 0111 0110 0010 1000 0000 0110 1110 0101 K4:0xe6f772 1ae887 1110 0110 1111 0111 0111 0010 0001 1010 1110 1000 1000 0111 K5:0xeed777 264591 1110 1110 1101 0111 0111 0111 0010 0110 0100 0101 1001 0001 K6:0xefd35b 8b2143 1110 1111 1101 0011 0101 1011 1000 1011 0010 0001 0100 0011 K7:0x2fd3fb e6c300 0010 1111 1101 0011 1111 1011 1110 0110 1100 0011 0000 0000 K8:0xbf59db 50074e 1011 1111 0101 1001 1101 1011 0101 0000 0000 0111 0100 1110 |