Алгоритм шифрования DES
64.11K
Категория: ПрограммированиеПрограммирование

Алгоритм шифрования DES

1. Алгоритм шифрования DES

2.

• Шифруемое сообщение – шифровка =
11111000 11101000 11110100 11110000
11101110 11100010 11101010 11100000
• Ключ шифрования 12345678 = 00110001
00110010 00110011 00110100 00110101
00110110 00110111 00111000

3.

Шаг 1 Начальная перестановка
Входная последовательность
11111000111010001111010011110000111011
10111000101110101011100000
Cогласно таблице начальной перестановки
перестанавливаем биты в сообщении.
58
62
57
61
50
54
49
53
42
46
41
45
34
38
33
37
26
30
25
29
18
22
17
21
10
14
9
13
2
6
1
5
60
64
59
63
52
56
51
55
44
48
43
47
36
40
35
39
28
32
27
31
20
24
19
23
12
16
11
15
4
8
3
7
Полученная последовательность
1111111100001101000101000000000011111
111111111110101001101110000

4.

Шаг 2 Получение последовательности L(0) и
R(0)
Делим полученную последовательность согласно таблицам.
Последовательности получаются путём деления блока в 64
бита на 2 равных части.
L(0) перестановка
1
17
2
18
3
19
4
20
5
21
6
22
7
23
8
24
9
25
10
26
11
27
12
28
13
29
14
30
15
31
16
32
L(0) последовательность полученная
11111111000011010001010000000000
R(0) перестановка
33
34
35
36
37
38
39
40
41
42
43
44 45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 61
62
63
64
R(0) последовательность полученная 11111111111111110101001101110000

5.

Шаг 3 Функция выбора и перестановки
последовательности В (преобразование ключа
шифрования)
Входная последовательность
0011000100110010001100110011010000110101
001101100011011100111000
57
10
63
14
49
2
55
6
41
59
47
61
33
51
39
53
25
43
31
45
17
35
23
37
9
27
15
29
1
19
7
21
58
11
62
13
50
3
54
5
42
60
46
28
34
52
38
20
26
44
30
12
18
36
22
4
Полученная последовательность
0000000000000000111111111111011001100
1111000100000001111

6.

Шаг 5 получение последовательности C(i)
По таблице сдвигаем биты в последовательностях
1
1
2
1
3
2
4
2
5
2
6
2
7
2
8
2
9
1
10
2
11
2
12
2
13
2
C(0) = 0000000000000000111111111111
C(1)
C(2)
C(3)
C(4)
C(5)
C(6)
C(7)
C(8)
C(9)
C(10)
C(11)
C(12)
C(13)
C(14)
C(15)
C(16)
0000000000000001111111111110
0000000000000011111111111100
0000000000001111111111110000
0000000000111111111111000000
0000000011111111111100000000
0000001111111111110000000000
0000111111111111000000000000
0011111111111100000000000000
0111111111111000000000000000
1111111111100000000000000001
1111111110000000000000000111
1111111000000000000000011111
1111100000000000000001111111
1110000000000000000111111111
1000000000000000011111111111
0000000000000000111111111111
14
2
15
2
16
1

7.

Шаг 6 получение последовательности D(i)
По той же таблице сдвигаем биты в
последовательностях
D(0) = 0110011001111000100000001111
D(1)
D(2)
D(3)
D(4)
D(5)
D(6)
D(7)
D(8)
D(9)
D(10)
D(11)
D(12)
D(13)
D(14)
D(15)
D(16)
1100110011110001000000011110
1001100111100010000000111101
0110011110001000000011110110
1001111000100000001111011001
0111100010000000111101100110
1110001000000011110110011001
1000100000001111011001100111
0010000000111101100110011110
0100000001111011001100111100
0000000111101100110011110001
0000011110110011001111000100
0001111011001100111100010000
0111101100110011110001000000
1110110011001111000100000001
1011001100111100010000000111
0110011001111000100000001111

8.

Шаг 7 получение последовательностей K(i)
Для получения последовательности K(i) произведём конкатенацию последовательностей
C(i) и D(i). В полученной последовательности C(i)D(i) переставим биты согласно таблице.
14
17
11
24
1
5
3
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
K(0) = 010100010010110010001100101001110100001111000000
K(1)
010100000010110010101100010101110010101011000010
K(2)
010100001010110010100100010100001010001101000111
K(3)
110100001010110000100110111101101000010010001100
K(4)
111000001010011000100110010010000011011111001011
K(5)
111000001001011000100110001111101111000000101001
K(6)
111000001001001001110010011000100101110101100010
K(7)
101001001101001001110010100011001010100100111010
K(8)
101001100101001101010010111001010101111001010000
K(9)
001001100101001101010011110010111001101001000000
K(10)
001011110101000101010001110100001100011100111100
K(11)
000011110100000111011001000110010001111010001100
K(12)
000111110100000110011001110110000111000010110001
K(13)
000111110000100110001001001000110110101000101101
K(14)
000110110010100010001101101100100011100110010010
K(15)
000110010010110010001100101001010000001100110111
K(16)
010100010010110010001100101001110100001111000000

9.

Шаг 8 функция Е(шифрование, перестановка
с расширением)
R(0) = 11111111111111110101001101110000
32
8
13
24
1
9
17
25
2
10
18
26
3
11
19
27
4
12
20
28
5
13
21
29
4
12
20
28
5
13
21
29
6
14
22
30
7
15
23
31
8
16
24
32
9
17
25
1
E(R(0)) =
011111111111111111111110101010100110101110100001

10.

Объединение R(i)K(i+1) XOR
R(0)K(1) xor =
011111111111111111111110101010100110101110100001
010100000010110010101100010101110010101011000010
001011111101001101010010111111010100000101100011
Подстановка через S блоки(вход 6 бит выход 4 бита)
001011 111101 001101 010010 111111 010100 000101 100011
001011: Номер строки 01
Номер столбца 0101

11.

Подстановка через S блоки(вход 6 бит выход 4 бита)
S(1) = 2 = 0010
S(5) = 3 = 0011
S(2) = 14 = 1110 S(3) = 9 = 1001
S(6) = 3 = 0011 S(7) = 11 = 1011
S(4) = 2 = 0010
S(8) = 1 = 0001
Выходная (S1..S8) = 00101110100100100011001110110001
Прямая перестановка с помощью P блоков
16
2
7
8
20
24
21
14
29
32
12
27
28
3
17
9
1
19
15
13
23
30
26
6
5
22
18
11
31
4
10
25
Результат = 01100110011010000010111110010001

12.

L(0) Результат XOR
11111111000011010001010000000000
XOR 01100110011010000010111110010001
R(1)=10011001011001010011101110010001
L(1) = R(0)
В итоге этих действий появляется новая правая
половина, а старая правая половина становится
новой левой. Эти действия повторяются 16 раз,
образуя 16 этапов DES.

13.

L(1) = 11111111111111110101001101110000
R(1) = 10011001011001010011101110010001
E(R1) = 110011110010101100001010100111110111110010100011
E(R1) XOR K(2) = 100111111000011110101110110011111101111111100100
S(1..8) = 00101001100011011111100011000100
P = 10110001000111000101001111100001
P XOR L(1) = 01001110111000110000000010010001 = R(2)
L(2) = R(1) = 10011001011001010011101110010001
E(R2) = 101001011101011100000110100000000001010010100010
E(R2) XOR K(3) = 011101010111101100100000011101101001000000101110
S(1..8) = 00111010001110101000100101000010
P = 01010101010110100010001001000110
P XOR L(2) = 11001100001111110001100111010111 = R(3)
L(3) = R(2) = 01001110111000110000000010010001
E(R3) = 111001011000000111111110100011110011111010101111
E(R3) XOR K(4) = 000001010010011111011000110001110000100101100100
S(1..8) = 00000111000110110110011111010100
P = 11000110011101000110000011111001
P XOR L(3) = 10001000100101110110000001101000 = R(4)

14.

Шаг 9 заключительная перестановка(обратная)
40
38
36
34
8
6
4
2
48
46
44
42
16
14
12
10
56
54
52
50
24
22
20
18
64
62
60
58
32
30
28
26
39
37
35
33
7
5
3
1
47
45
43
41
15
13
11
9
55
53
51
49
23
21
19
17
63
61
59
57
31
29
27
25
Вход (L16R16) =
1001110001100011100100001010011010100100010111110110111000110100
Полученная = 00110000 00111001 11101011 01101000 01100110
10011011 00111000 11000101
В десятичной системе 48 57 235 104 102 155 56 197
По таблице ANSI
0 9 л h f > 8 Е
English     Русский Правила