编辑: You—灰機 | 2019-07-14 |
1010101011001100111100011110 C2 = 1100001100110010101010111111D2 =
0101010110011001111000111101 C3 = 0000110011001010101011111111D3 =
0101011001100111100011110101 C4 = 0011001100101010101111111100D4 =
0101100110011110001111010101 ……C15 = 1111100001100110010101010111D15 =
1010101010110011001111000111 C16 = 1111000011001100101010101111D16 =
0101010101100110011110001111 第一步:生成16个子钥(48位) Kn(48位) = PC-2( CnDn(56位) )PC-2(8*6)
14 17
11 24
1 53
28 15
6 21
10 23
19 12
4 26
8 16
7 27
20 13
2 41
52 31
37 47
55 30
40 51
45 33
48 44
49 39
56 34
53 46
42 50
36 29
32 第一步:生成16个子钥(48位) 最终得到所有16个子钥,每个48位:K1 =
000110 110000
001011 101111
111111 000111
000001 110010 K2 =
011110 011010
111011 011001
110110 111100
100111 100101K3 =
010101 011111
110010 001010
010000 101100
111110 011001K4 =
011100 101010
110111 010110
110110 110011
010100 011101K5 =
011111 001110
110000 000111
111010 110101
001110 101000K6 =
011000 111010
010100 111110
010100 000111
101100 101111K7 =
111011 001000
010010 110111
111101 100001
100010 111100K8 =
111101 111000
101000 111010
110000 010011
101111 111011K9 =
111000 001101
101111 101011
111011 011110
011110 000001K10 =
101100 011111
001101 000111
101110 100100
011001 001111K11 =
001000 010101
111111 010011
110111 101101
001110 000110K12 =
011101 010111
000111 110101
100101 000110
011111 101001K13 =
100101 111100
010111 010001
111110 101011
101001 000001K14 =
010111 110100
001110 110111
111100 101110
011100 111010K15 =
101111 111001
000110 001101
001111 010011
111100 001010K16 =
110010 110011
110110 001011
000011 100001
011111 110101 第二步:用子钥对64位数据加密 对明文M使用IP(8*8)58
50 42
34 26
18 10
2 60
52 44
36 28
20 12
4 62
54 46
38 30
22 14
6 64
56 48
40 32
24 16
8 57
49 41
33 25
17 9
1 59
51 43
35 27
19 11
3 61
53 45
37 29
21 13
5 63
55 47
39 31
23 15
7 第二步:用子钥对64位数据加密 由于M(64位) =0000
0001 0010
0011 0100
0101 0110
0111 1000
1001 1010
1011 1100
1101 1110 1111对M运用IP,故有IP(64位) =
1100 1100
0000 0000
1100 1100
1111 1111
1111 0000
1010 1010
1111 0000
1010 1010 第二步:用子钥对64位数据加密 IP(64位) = L0(32位) + R0(32位)故L0 (32位) =
1100 1100
0000 0000
1100 1100
1111 1111 R0 (32位) =
1111 0000
1010 1010
1111 0000
1010 1010 第二步:用子钥对64位数据加密 从L0和R0开始,循环16次,得出L1R1到L16R16,依据递推公式:Ln = R(n-1) Rn = L(n-1) + f (R(n-1),Kn) 其中除了Kn为48位,其他变量及函数均为32位.其中+号表示异或XOR运算,函数f 从一个32位的数据块R(n-1)和一个48位子钥Kn得到一个新的32位数据块.(算法从略) 第二步:用子钥对64位数据加密 到此为止,我们得到了16对32位的数据块,即L1R1, L2R2, L3R3, …, L16R16最后一对L16R16就是我们需要的. 第二步:用子钥对64位数据加密 继续对R16L16(64位)运用一次重排列:IP-1(8*8)
40 8
48 16
56 24
64 3239
7 47
15 55
23 63
31 38
6 46
14 54
22 62
30 37
5 45
13 53
21 61
29 36
4 44
12 52
20 60
28 35
3 43
11 51
19 59
27 34
2 42
10 50
18 58
26 33