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

posted @ 2022-10-06 10:01  Morning|Star  阅读(328)  评论(0)    收藏  举报