DES加解密计算
一、DES加密步骤
第一步:求得子密钥:
1.经过置换选择1,将输出的56位密钥分成C0,DO两部分,每部分28位;
⒉将两部分分别循环左移1位或2位。共循环左移16轮,各生成16组Ci、Di;
3.对Ci,Di进行压缩置换,从56位的Ci、Di中得出48位子密钥Ki
第二步,DES加密
1.对64位明文进行初始置换;
⒉将明文分成左右两半部分来得出L0,R0;
3.进行16函数运算:
1)对R0进行扩展置换操作(32->48位)得到E(R0);
2)对E(R0)和K1进行异或操作;
3)进行s盒置换(48->32位)得到B;
4)进行置换运算Р操作;
5) 令Li=R(i-1), Ri = L(i - 1) ^ f(R(i - 1), K(i - 1)), 重复迭代16轮, 直到得到L16和R16
4.左右半部分合在一起做末置换,输出密文。
二、第一步详算
已知有十六进制的k=133457799BBCDFF1
答:
1.转化成二进制:
K=
0001 0011 0011 0100
0101 0111 0111 1001
1001 1011 1011 1100
1101 1111 1111 0001
2.经过密钥置换,得:

C0=1111000 0110011 0010101 0101111
D0=0101010 1011001 1001111 0001111
3.将C0、D0分别循环左移1位或2位。得到C16和D16

第一轮循环左移1位,得
C1=1110000 1100110 0101010 1011111
D1=1010101 0110011 0011110 0011110
第二轮循环左移1位,得
C2=1100001 1001100 10101010111111
D2=0101010 1100110 0111100 0111101
第三轮循环左移2位,得
C3=0000110 0110010 1010101 1111111
D3=0101011 0011001 1110001 1110101
C16=...
D16=...
4.对Ci,Di进行压缩置换,从56位的Ci、Di中得出48位子密钥Ki

K1=000110 110000 001011 101111 111111 000111 000001 110010
K2=011110 011010 111011 011001 110110 111100 100111 100101
K3=010101 011111 110010 001010 010000 101100 111110 011001
...
K16=...
三、第二步详算
十六进制明文M=0123456789ABCDEF
step1:
转换为二进制:
M = 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
step2:
进行初始置换:

L0=1100 1100 0000 0000 1100 1100 1111 1111
R0=1111 0000 1010 1010 1111 0000 1010 1010
step3:
对R0进行扩展置换操作(E(Ro) 依据下方置换表):

E(Ro) = 011110 100001 010101 010101
011110 100001 010101 010101
与K1进行异或运算
E(Ro)^K1 = 011000 010001 011110 111010 100001 100110 010100 100111
进行s盒置换。 得:

011000 010001 011110 111010 100001 100110
010100 100111
查找规则 将每一组的第一和最后一位作为行,中间四位作为列。
S1盒查找第00行第1100列 ==> 0101
S2盒查找第01行第1000列 ==> 1100
S3盒查找第00行第1111列 ==> 1000
S4盒查找第10行第1101列 ==> 0010
S5盒查找第11行第0000列 ==> 1101
S6盒查找第00行第1111列 ==> 1011
S7盒查找第00行第1010列 ==> 1001
S8盒查找第11行第0011列 ==> 0111
S1(B1)...S8(B8)/B = 0101 1100 1000 0010 1101 1011 1001 0111
进行置换运算P得:

P(B) = 0010 0011 0100 1010 1010 1001 1011 1011
即f(R0, K1) = P(B) = 0010 0011 0100 1010 1010 1001 1011 1011
R1 = L0 ^ f(R0, K1) = 1110 1111 0100 1010 0110 0101 0100 0100
L1 = R0,重复迭代16轮函数f, 直至得到L16和R16。
L16=0100 0011 0100 0010 0011 0010 0011 0100
R16=0000 1010 0100 1100 1101 1001 1001 0101
4.左右半部分合在一起做末置换,输出密文。
L16R16 = 0100 0011 0100 0010 0011 0010 0011 0100 0000 1010 0100 1100 1101 1001 1001 0101

C = 10000101 11101000 00010011 01010100 00001111 00001010 10110100 00000101
DES的解密和加密使用相同的算法
- 解密过程中使用的子密钥顺序与加密过程中使用的密钥顺序相反。
**即:如果各轮的加密密钥是 **K1,K2,K3,…,K16
那么解密密钥就是 K16 …,K3,K2,K1

浙公网安备 33010602011771号