Крипто-форум crprogram.16mb.com

Програмування на Object Pascal, Lazarus, криптографія, криптоаналіз, шифри, вихідні коди, вирішення задач, приклади програм

Часовий пояс: UTC десь + 2 години




Розпочати нову тему Відповісти  [ 17 повідомлень ] 
Автор Повідомлення
 Заголовок повідомлення: DES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 502
DES (Data Encryption Standard - Стандарт шифрування даних ) — симетричний шифр (алгоритм шифрування), стандарт шифрування, який був прийнятий урядом США із 1976 року.

Розроблений в фірмі IBM.

Довжина ключа 56 біт.
Довжина блоку 64 біт.


Повернутися наверх
  
 
 Заголовок повідомлення: Re: DES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 282
Для ключа
Код:
0000000000000000


і відкритого тексту:
Код:
0000000000000000


отримаємо результат роботи алгоритму DES
Код:
8CA64DE9C1B123A7

(тестовий вектор DES)


Повернутися наверх
  
 
 Заголовок повідомлення: Re: DES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 282
детальний приклад
Код:
Key = FEDCBA9876543210
111101001111110110011000011001001011011001011010 <== Key i =1

100101100101100110100110110110101001010111011001 <== Key i =2

101110100010101101110101010010111101011100101101 <== Key i =3

100011010111011000101101010110100111110110101000 <== Key i =4

110000110001011111111100111010000101100100111101 <== Key i =5

110111001101101011100001110000110111101010111010 <== Key i =6

100100111111101101101010111101010001101100111001 <== Key i =7

101010000111011111000111100100110001101001111110 <== Key i =8

001111110011011000010110110110010100011111000110 <== Key i =9

011011100001110011111000100111001110001010001101 <== Key i =10

110111101110000001111100111100100111011011000101 <== Key i =11

100011101100111100011010101110101010001110101011 <== Key i =12

011011100011101100101111101101100111111100000011 <== Key i =13

101010111011110001001001011111100010001101110010 <== Key i =14

010010010110111011111010111101011110100101001010 <== Key i =15

001101011100001011111100010001111000111111001101 <== Key i =16



Повернутися наверх
  
 
 Заголовок повідомлення: Re: DES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 282
Код:
0123456789ABCDEF
0000000100100011010001010110011110001001101010111100110111101111 crypt InData
1100110000000000110011001111111111110000101010101111000010101010  crypt IP InData

round =1

11001100000000001100110011111111 r=1 Li0
11110000101010101111000010101010 r=1 Ri0

11110000101010101111000010101010 r=1 Li1
0-1111-01-0000-10-10101010101011110100001010101010101 r=1 R1expand
100011101110100011001101000111101010001100001111 r=1 = R1 хоr K

Si=1 n=3 вхід =1 вихід =12

Si=2 n=2 вхід =7 вихід =1

Si=3 n=3 вхід =1 вихід =10

Si=4 n=1 вхід =6 вихід =0

Si=5 n=1 вхід =3 вихід =12

Si=6 n=2 вхід =5 вихід =8

Si=7 n=0 вхід =6 вихід =8

Si=8 n=1 вхід =7 вихід =4

11000001101000001100100010000100 r=1 = R1 після S-box
00010001100001001100000100100101 r=1 = R0 після P
11011101100001000000110111011010 r=1 = L0 xor R0
11110000101010101111000010101010 r=1 = L
11011101100001000000110111011010 r=1 = R

round =2

11110000101010101111000010101010 r=2 Li0

11011101100001000000110111011010 r=2 Ri0
11011101100001000000110111011010 r=2 Li1
0-1101-11-1101-11-10000001000000001011011111011110101 r=2 R1expand
111110011110010110101110110111110010101100101100 r=2 = R1 хоr K

Si=1 n=2 вхід =15 вихід =0

Si=2 n=0 вхід =15 вихід =10

Si=3 n=0 вхід =11 вихід =7

Si=4 n=2 вхід =7 вихід =13

Si=5 n=3 вхід =11 вихід =9

Si=6 n=2 вхід =9 вихід =0

Si=7 n=2 вхід =6 вихід =7

Si=8 n=2 вхід =6 вихід =14

00001010011111011001000001111110 r=2 = R1 після S-box
11101111000110110001010001100100 r=2 = R0 після P
00011111101100011110010011001110 r=2 = L0 xor R0
11011101100001000000110111011010 r=2 = L
00011111101100011110010011001110 r=2 = R


round =3

11011101100001000000110111011010 r=3 Li0
00011111101100011110010011001110 r=3 Ri0
00011111101100011110010011001110 r=3 Li1
0-0001-11-1111-11-10110100011111100001001011001011100 r=3 R1expand
101101011101011011010110101110110100000101110001 r=3 = R1 хоr K

Si=1 n=3 вхід =6 вихід =1

Si=2 n=1 вхід =14 вихід =11

Si=3 n=1 вхід =13 вихід =11

Si=4 n=0 вхід =11 вихід =5

Si=5 n=2 вхід =7 вихід =8

Si=6 n=2 вхід =10 вихід =4

Si=7 n=1 вхід =2 вихід =11

Si=8 n=3 вхід =8 вихід =15

00011011101101011000010010111111 r=3 = R1 після S-box
11001111000010100101110100101111 r=3 = R0 після P
00010010100011100101000011110101 r=3 = L0 xor R0
00011111101100011110010011001110 r=3 = L
00010010100011100101000011110101 r=3 = R


round =4

00011111101100011110010011001110 r=4 Li0
00010010100011100101000011110101 r=4 Ri0
00010010100011100101000011110101 r=4 Li1
1-0001-01-0010-10-10001011100001010100001011110101010 r=4 R1expand
000001110010001001110001011100000110101000000010 r=4 = R1 хоr K

Si=1 n=1 вхід =0 вихід =0

Si=2 n=2 вхід =9 вихід =8

Si=3 n=1 вхід =4 вихід =3

Si=4 n=3 вхід =8 вихід =9

Si=5 n=0 вхід =14 вихід =14

Si=6 n=0 вхід =3 вихід =15

Si=7 n=2 вхід =4 вихід =12

Si=8 n=0 вхід =1 вихід =2

00001000001110011110111111000010 r=4 = R1 після S-box
10010101001111100010000011001101 r=4 = R0 після P
10001010100011111100010000000011 r=4 = L0 xor R0
00010010100011100101000011110101 r=4 = L
10001010100011111100010000000011 r=4 = R


round =5

00010010100011100101000011110101 r=5 Li0
10001010100011111100010000000011 r=5 Ri0
10001010100011111100010000000011 r=5 Li1
1-1000-10-1010-10-10001011111111000001000000000000111 r=5 R1expand
000001100100001110100011000010001101100100111010 r=5 = R1 хоr K

Si=1 n=1 вхід =0 вихід =0

Si=2 n=2 вхід =2 вихід =7

Si=3 n=0 вхід =7 вихід =5

Si=4 n=3 вхід =1 вихід =15

Si=5 n=0 вхід =1 вихід =12

Si=6 n=1 вхід =6 вихід =9

Si=7 n=2 вхід =2 вихід =11

Si=8 n=2 вхід =13 вихід =3

00000111010111111100100110110011 r=5 = R1 після S-box
11010111010001110111110001010001 r=5 = R0 після P
11000101110010010010110010100100 r=5 = L0 xor R0
10001010100011111100010000000011 r=5 = L
11000101110010010010110010100100 r=5 = R


round =6

10001010100011111100010000000011 r=6 Li0
11000101110010010010110010100100 r=6 Ri0
11000101110010010010110010100100 r=6 Li1
0-1100-00-0101-11-11001010010100101011001010100001001 r=6 R1expand
101111000110010010110011010101101110111110110011 r=6 = R1 хоr K

Si=1 n=3 вхід =7 вихід =7

Si=2 n=0 вхід =3 вихід =14

Si=3 n=0 вхід =9 вихід =13

Si=4 n=3 вхід =9 вихід =4

Si=5 n=1 вхід =10 вихід =15

Si=6 n=2 вхід =7 вихід =3

Si=7 n=2 вхід =15 вихід =2

Si=8 n=3 вхід =9 вихід =12

01111110110101001111001100101100 r=6 = R1 після S-box
01101101001011011011011110110010 r=6 = R0 після P
11100111101000100111001110110001 r=6 = L0 xor R0
11000101110010010010110010100100 r=6 = L
11100111101000100111001110110001 r=6 = R


round =7

11000101110010010010110010100100 r=7 Li0
11100111101000100111001110110001 r=7 Ri0
11100111101000100111001110110001 r=7 Li1
1-1110-00-0111-11-10100000100001110100111110110100011 r=7 R1expand
011000110000011001101110110011110110011010011010 r=7 = R1 хоr K

Si=1 n=0 вхід =12 вихід =5

Si=2 n=2 вхід =8 вихід =5

Si=3 n=1 вхід =12 вихід =12

Si=4 n=2 вхід =7 вихід =13

Si=5 n=3 вхід =9 вихід =15

Si=6 n=2 вхід =11 вихід =10

Si=7 n=0 вхід =13 вихід =10

Si=8 n=0 вхід =13 вихід =0

01010101110011011111101010100000 r=7 = R1 після S-box
10110001001001011101010111010011 r=7 = R0 після P
01110100111011001111100101110111 r=7 = L0 xor R0
11100111101000100111001110110001 r=7 = L
01110100111011001111100101110111 r=7 = R


round =8

11100111101000100111001110110001 r=8 Li0
01110100111011001111100101110111 r=8 Ri0
01110100111011001111100101110111 r=8 Li1
1-0111-01-0100-10-11101011001011111110010101110101110 r=8 R1expand
000100101110000010011110111011000011000111010000 r=8 = R1 хоr K

Si=1 n=0 вхід =2 вихід =13

Si=2 n=2 вхід =7 вихід =1

Si=3 n=0 вхід =1 вихід =0

Si=4 n=0 вхід =15 вихід =15

Si=5 n=3 вхід =13 вихід =4

Si=6 n=1 вхід =1 вихід =15

Si=7 n=1 вхід =3 вихід =7

Si=8 n=0 вхід =8 вихід =10

11010001000011110100111101111010 r=8 = R1 після S-box
10011010111101101111010001001010 r=8 = R0 після P
01111101010101001000011111111011 r=8 = L0 xor R0
01110100111011001111100101110111 r=8 = L
01111101010101001000011111111011 r=8 = R


round =9

01110100111011001111100101110111 r=9 Li0
01111101010101001000011111111011 r=9 Ri0
01111101010101001000011111111011 r=9 Li1
1-0111-11-1101-01-01010101001010000001111111111110110 r=9 R1expand
100000001001110010111111100110011011100000110000 r=9 = R1 хоr K

Si=1 n=2 вхід =0 вихід =4

Si=2 n=1 вхід =4 вихід =15

Si=3 n=2 вхід =9 вихід =1

Si=4 n=3 вхід =15 вихід =14

Si=5 n=2 вхід =3 вихід =11

Si=6 n=1 вхід =13 вихід =11

Si=7 n=2 вхід =0 вихід =1

Si=8 n=2 вхід =8 вихід =0

01001111000111101011101100010000 r=9 = R1 після S-box
01110111011010001111000011010000 r=9 = R0 після P
00000011100001000000100110100111 r=9 = L0 xor R0
01111101010101001000011111111011 r=9 = L
00000011100001000000100110100111 r=9 = R


round =10

01111101010101001000011111111011 r=10 Li0
00000011100001000000100110100111 r=10 Ri0
00000011100001000000100110100111 r=10 Li1
1-0000-00-0011-11-10000001000000001010011110100001110 r=10 R1expand
111011100110000011110000100110011101111110000011 r=10 = R1 хоr K

Si=1 n=3 вхід =13 вихід =0

Si=2 n=2 вхід =3 вихід =11

Si=3 n=1 вхід =1 вихід =7

Si=4 n=2 вхід =8 вихід =15

Si=5 n=2 вхід =3 вихід =11

Si=6 n=1 вхід =14 вихід =3

Si=7 n=2 вхід =15 вихід =2

Si=8 n=1 вхід =1 вихід =15

00001011011111111011001100101111 r=10 = R1 після S-box
11101101011010110111110011100100 r=10 = R0 після P
10010000001111111111101100011111 r=10 = L0 xor R0
00000011100001000000100110100111 r=10 = L
10010000001111111111101100011111 r=10 = R


round =11

00000011100001000000100110100111 r=11 Li0
10010000001111111111101100011111 r=11 Ri0
10010000001111111111101100011111 r=11 Li1
1-1001-01-0000-00-00111111111111111110110100011111111 r=11 R1expand
000101001110000110000011000011010001111000111010 r=11 = R1 хоr K

Si=1 n=1 вхід =2 вихід =7

Si=2 n=0 вхід =7 вихід =4

Si=3 n=0 вхід =3 вихід =14

Si=4 n=1 вхід =1 вихід =8

Si=5 n=1 вхід =1 вихід =11

Si=6 n=1 вхід =8 вихід =6

Si=7 n=2 вхід =12 вихід =0

Si=8 n=2 вхід =13 вихід =3

01110100111010001011011000000011 r=11 = R1 після S-box
00100001001000111000101111011110 r=11 = R0 після P
00100010101001111000001001111001 r=11 = L0 xor R0
10010000001111111111101100011111 r=11 = L
00100010101001111000001001111001 r=11 = R


round =12

10010000001111111111101100011111 r=12 Li0
00100010101001111000001001111001 r=12 Ri0
00100010101001111000001001111001 r=12 Li1
1-0010-00-0010-10-10100001111110000000100001111110010 r=12 R1expand
000111101001101000010101011110101110000001011001 r=12 = R1 хоr K

Si=1 n=1 вхід =3 вихід =4

Si=2 n=3 вхід =4 вихід =3

Si=3 n=2 вхід =4 вихід =8

Si=4 n=1 вхід =10 вихід =2

Si=5 n=0 вхід =15 вихід =9

Si=6 n=2 вхід =7 вихід =3

Si=7 n=1 вхід =0 вихід =13

Si=8 n=1 вхід =12 вихід =0

01000011100000101001001111010000 r=12 = R1 після S-box
01100011011100001110000100000001 r=12 = R0 після P
11110011010011110001101000011110 r=12 = L0 xor R0
00100010101001111000001001111001 r=12 = L
11110011010011110001101000011110 r=12 = R


round =13

00100010101001111000001001111001 r=13 Li0
11110011010011110001101000011110 r=13 Ri0
11110011010011110001101000011110 r=13 Li1
0-1111-01-0011-01-01001011110100011110100000011111101 r=13 R1expand
000101000101000101110001001110010011111111111110 r=13 = R1 хоr K

Si=1 n=1 вхід =2 вихід =7

Si=2 n=1 вхід =2 вихід =4

Si=3 n=1 вхід =2 вихід =0

Si=4 n=3 вхід =8 вихід =9

Si=5 n=0 вхід =7 вихід =6

Si=6 n=1 вхід =9 вихід =1

Si=7 n=3 вхід =15 вихід =12

Si=8 n=2 вхід =15 вихід =8

01110100000010010110000111001000 r=13 = R1 після S-box
10001000000101001010001011010011 r=13 = R0 після P
10101010101100110010000010101010 r=13 = L0 xor R0
11110011010011110001101000011110 r=13 = L
10101010101100110010000010101010 r=13 = R


round =14

11110011010011110001101000011110 r=14 Li0
10101010101100110010000010101010 r=14 Ri0
10101010101100110010000010101010 r=14 Li1
0-1010-10-1010-10-10110100110100100000001010101010101 r=14 R1expand
111111101110100111101111111011100011011000100111 r=14 = R1 хоr K

Si=1 n=3 вхід =15 вихід =13

Si=2 n=2 вхід =7 вихід =1

Si=3 n=3 вхід =3 вихід =0

Si=4 n=3 вхід =7 вихід =8

Si=5 n=3 вхід =13 вихід =4

Si=6 n=3 вхід =1 вихід =3

Si=7 n=0 вхід =12 вихід =5

Si=8 n=3 вхід =3 вихід =7

11010001000010000100001101010111 r=14 = R1 після S-box
00000010101101101110100001100010 r=14 = R0 після P
11110001111110011111001001111100 r=14 = L0 xor R0
10101010101100110010000010101010 r=14 = L
11110001111110011111001001111100 r=14 = R


round =15

10101010101100110010000010101010 r=15 Li0
11110001111110011111001001111100 r=15 Ri0
11110001111110011111001001111100 r=15 Li1
0-1111-01-0001-11-11111110011111110100100001111111001 r=15 R1expand
001100110101000100001001000011111010101010110011 r=15 = R1 хоr K

Si=1 n=0 вхід =6 вихід =11

Si=2 n=3 вхід =10 вихід =7

Si=3 n=0 вхід =2 вихід =9

Si=4 n=1 вхід =4 вихід =6

Si=5 n=1 вхід =1 вихід =11

Si=6 n=2 вхід =13 вихід =13

Si=7 n=2 вхід =5 вихід =3

Si=8 n=3 вхід =9 вихід =12

10110111100101101011110100111100 r=15 = R1 після S-box
01111111110000000111011110111010 r=15 = R0 після P
11010101011100110101011100010000 r=15 = L0 xor R0
11110001111110011111001001111100 r=15 = L
11010101011100110101011100010000 r=15 = R


round =16

11110001111110011111001001111100 r=16 Li0
11010101011100110101011100010000 r=16 Ri0
11010101011100110101011100010000 r=16 Li1
0-1101-01-0101-01-01110100110101010101110100010100001 r=16 R1expand
010111110110100101011010111011010110011101101100 r=16 = R1 хоr K

Si=1 n=1 вхід =11 вихід =11

Si=2 n=2 вхід =11 вихід =6

Si=3 n=3 вхід =2 вихід =13

Si=4 n=0 вхід =13 вихід =12

Si=5 n=3 вхід =13 вихід =4

Si=6 n=0 вхід =11 вихід =4

Si=7 n=1 вхід =14 вихід =8

Si=8 n=2 вхід =6 вихід =14

10110110110111000100010010001110 r=16 = R1 після S-box
01001100100001110001001101111011 r=16 = R0 після P
10111101011111101110000100000111 r=16 = L0 xor R0
11010101011100110101011100010000 r=16 = L
10111101011111101110000100000111 r=16 = R
1110110100111001110110010101000011111010011101001011110011000100
Result = ED39D950FA74BCC4


Повернутися наверх
  
 
 Заголовок повідомлення: Re: DES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 502
Так як ДЕС давно вже не використовується
нпишу тут вихідні коди DES для навчальної програми.

Суть в тому що вихідні коди писались з врахуванням їх подальшого розуміння в процесі навчання.

(зауваження: практично всі операції виконуються над бітами)


Задаємо S-box DES, P-box DES та змінні:
Код:
const

HexValues='0123456789ABCDEF';

DesPC0:Array[1..28] of Byte = (57,49,41,33,25,17,9,
                                            1,58,50,42,34,26,18,
                                            10,2,59,51,43,35,27,
                                             19,11,3,60,52,44,36);

DesPD0:Array[1..28] of Byte =  (63,55,47,39,31,23,15,
                                            7,62,54,46,38,30,22,
                                           14,6,61,53,45,37,29,
                                            21,13,5,28,20,12,4);

DesPCD:Array[1..48] of Byte = (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);

DesIP:Array[1..64] of Byte = (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);

DesE:Array[1..48] of Byte = (32,1,2,3,4,5,
                                        4,5,6,7,8,9,
                                        8,9,10,11,12,13,
                                        12,13,14,15,16,17,
                                        16,17,18,19,20,21,
                                        20,21,22,23,24,25,
                                        24,25,26,27,28,29,
                                        28,29,30,31,32,1);

DesSBox:Array[1..8,0..3,0..15]of Byte = (
((14,04,13,01,02,15,11,08,03,10,06,12,05,09,00,07),
  (00,15,07,04,14,02,13,01,10,06,12,11,09,05,03,08),
  (04,01,14,08,13,06,02,11,15,12,09,07,03,10,05,00),
  (15,12,08,02,04,09,01,07,05,11,03,14,10,00,06,13)),

((15,01,08,14,06,11,03,04,09,07,02,13,12,00,05,10),
(03,13,04,07,15,02,08,14,12,00,01,10,06,09,11,05),
(00,14,07,11,10,04,13,01,05,08,12,06,09,03,02,15),
(13,08,10,01,03,15,04,02,11,06,07,12,00,05,14,09)),

((10,00,09,14,06,03,15,05,01,13,12,07,11,04,02,08),
(13,07,00,09,03,04,06,10,02,08,05,14,12,11,15,01),
(13,06,04,09,08,15,03,00,11,01,02,12,05,10,14,07),
(01,10,13,00,06,09,08,07,04,15,14,03,11,05,02,12)),

((07,13,14,03,00,06,09,10,01,02,08,05,11,12,04,15),
(13,08,11,05,06,15,00,03,04,07,02,12,01,10,14,09),
(10,06,09,00,12,11,07,13,15,01,03,14,05,02,08,04),
(03,15,00,06,10,01,13,08,09,04,05,11,12,07,02,14)),

((02,12,04,01,07,10,11,06,08,05,03,15,13,00,14,09),
(14,11,02,12,04,07,13,01,05,00,15,10,03,09,08,06),
(04,02,01,11,10,13,07,08,15,09,12,05,06,03,00,14),
(11,08,12,07,01,14,02,13,06,15,00,09,10,04,05,03)),

((12,01,10,15,09,02,06,08,00,13,03,04,14,07,05,11),
(10,15,04,02,07,12,09,05,06,01,13,14,00,11,03,08),
(09,14,15,05,02,08,12,03,07,00,04,10,01,13,11,06),
(04,03,02,12,09,05,15,10,11,14,01,07,06,00,08,13)),

((04,11,02,14,15,00,08,13,03,12,09,07,05,10,06,01),
(13,00,11,07,04,09,01,10,14,03,05,12,02,15,08,06),
(01,04,11,13,12,03,07,14,10,15,06,08,00,05,09,02),
(06,11,13,08,01,04,10,07,09,05,00,15,14,02,03,12)),

((13,02,08,04,06,15,11,01,10,09,03,14,05,00,12,07),
(01,15,13,08,10,03,07,04,12,05,06,11,00,14,09,02),
(07,11,04,01,09,12,14,02,00,06,10,13,15,03,05,08),
(02,01,14,07,04,10,08,13,15,12,09,00,03,05,06,11))
);

DesP:Array[1..32] Of Byte = (16,7,20,21,
                                        29,12,28,17,
                                        1,15,23,26,
                                        5,18,31,10,
                                        2,8,24,14,
                                        32,27,3,9,
                                        19,13,30,6,
                                        22,11,4,25);

DesIP1:Array[1..64] Of Byte = (40,8,48,16,56,24,64,32,
                                          39,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,1,41,9,49,17,57,25);

DesLSH:Array[1..16] Of Byte = (1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1);

var
  Form1: TForm1;
  paa:array[0..95]of byte;
  tvxi,tvux:file of byte;
  ////DES:
  InData,OutData:array[0..64] of byte;
  Key:array[0..64] of byte;
  Keyi:array[1..16,0..48] of byte;



Повернутися наверх
  
 
 Заголовок повідомлення: Re: DES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 502
Запис таблиці раундових підключів
Код:
procedure DESInitKey;
var
i,j,round:integer;
sum:integer;
C0,D0:array[1..28] of byte;
CD:array[1..56] of byte;
tm,tm2:byte;
begin

for i:=1 to 8 do
begin
sum:=0;
for j:=1 to 8 do
sum:=sum+Key[j+(i-1)*8];
if (sum mod 2) =1 then Key[i*8]:=0 else Key[i*8]:=1;
end;

for i:=1 to 28 do
begin
C0[i]:=Key[DesPC0[i]];
D0[i]:=Key[DesPD0[i]];
end;

for round:=1 to 16 do
begin

if DesLSH[round]=1 then
begin
tm:=C0[1];
for i:=1 to 27 do
C0[i]:=C0[i+1];
C0[28]:=tm;
tm:=D0[1];
for i:=1 to 27 do
D0[i]:=D0[i+1];
D0[28]:=tm;
end;

if DesLSH[round]=2 then
begin
tm:=C0[1];
tm2:=C0[2];
for i:=1 to 26 do
C0[i]:=C0[i+2];
C0[27]:=tm;
C0[28]:=tm2;
tm:=D0[1];
tm2:=D0[2];
for i:=1 to 26 do
D0[i]:=D0[i+2];
D0[27]:=tm;
D0[28]:=tm2;
end;

for j:=1 to 28 do
CD[j]:=C0[j];
for j:=1 to 28 do
CD[j+28]:=D0[j];

for j:=1 to 48 do
begin
Keyi[round,j]:=CD[DesPCD[j]];
end;
end;


end;



Повернутися наверх
  
 
 Заголовок повідомлення: Re: DES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 502
Функція DES-шифрування
Код:
procedure DEScrypt;
var
i,round,n,z,z2,n2:integer;
Li0,Ri0,Li1,Ri1:array[1..48] of byte;
tmp:byte;
begin

for i:=1 to 48 do
begin
Li0[i]:=0;
Ri0[i]:=0;
Li1[i]:=0;
Ri1[i]:=0;
end;


//IP
for i:=1 to 64 do
OutData[i]:=InData[DesIP[i]];


for i:=1 to 32 do
begin
Li0[i]:=OutData[i];
Ri0[i]:=OutData[i+32];
end;


for round:=1 to 16 do
begin //des раунд


//Li = Ri-1;
for i:=1 to 32 do
Li1[i]:=Ri0[i];

//E
for i:=1 to 48 do
Ri1[i]:=Ri0[DesE[i]];


//Xor Keyi
for i:=1 to 48 do
Ri1[i]:=Ri1[i] xor Keyi[round,i];

//Sbox
z:=0;
z2:=0;
for i:=1 to 8 do
begin
n:=2*Ri1[1+z]+Ri1[6+z];
n2:=8*Ri1[2+z]+4*Ri1[3+z]+2*Ri1[4+z]+Ri1[5+z];
tmp:=DesSBox[i,n,n2];
Ri1[1+z2]:= tmp div 8;
Ri1[2+z2]:= (tmp mod 8)div 4;
Ri1[3+z2]:= (tmp mod 4)div 2;
Ri1[4+z2]:= (tmp mod 2)div 1;
z:=z+6;
z2:=z2+4;
end;

//P
for i:=1 to 32 do
Ri0[i]:=Ri1[DesP[i]];

//Ri = Li xor f(Ri-1,k);
for i:=1 to 32 do
Ri1[i]:=Li0[i] xor Ri0[i];

for i:=1 to 32 do
begin
Li0[i]:=Li1[i];
Ri0[i]:=Ri1[i];
end;

end; //des раунд


for i:=1 to 32 do
begin
InData[i]:=Ri0[i];
InData[i+32]:=Li0[i];
end;

for i:=1 to 64 do
OutData[i]:=InData[DesIP1[i]];

end;


Повернутися наверх
  
 
 Заголовок повідомлення: Re: DES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 502
Отримуємо біти ключа з текстового рядка edit1.text
Код:
function IntToBin(Value: integer; Digits: integer): string;
var
i: integer;
begin
result := '';
for i := 0 to Digits - 1 do begin
  if Value and (1 shl i) > 0
     then result := '1' + result
     else result := '0' + result;
end;
end;

procedure getkey();
var
i,j:integer;
sK,s:string;
keyint:array[1..8]of byte;
begin

for i:=1 to 8 do
keyint[i]:=0;
sK:=form1.edit1.Text;

for i:=1 to length(form1.edit1.Text) do
keyint[i]:=ord(sK[i]);


for j:=1 to 8 do
begin
s:=inttobin(keyint[j],8);
for i:=1 to 8 do
Key[i+(j-1)*8]:=strtoint(s[i]);
end;

DESInitKey;

end;


Повернутися наверх
  
 
 Заголовок повідомлення: Re: DES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 502
Процедура DES-CBC :
Код:
function BinToInt( Binary: String ):Integer;
var
  i, j: Integer;
begin
  Result := 0;
  j := 1;
  for i := Length( Binary ) downTo 1 do
  begin
    Result := Result + StrToInt( Binary[i] ) * j;
    j := j*2;
  end;
end;


procedure cipherCBC();
var
Buf, Buf0: Array [0..7] Of byte;
i,j,kk,SizeBuf:integer;
FS,bss:integer;
s:string;
begin
bss:=7;
SizeBuf:=SizeOf(Buf);

getkey();

for i:=0 to bss do
Buf0[i]:=0;
BlockWrite(tvux, Buf0, SizeBuf);


FS:=filesize(tvxi) div SizeBuf;

for kk:=1 to FS do
begin
BlockRead(tvxi, Buf, SizeBuf);
for j:=0 to bss do
Buf[j]:=Buf[j] xor Buf0[j];

////////////////////////////
for j:=1 to 8 do
begin
s:=inttobin(Buf[j-1],8);
for i:=1 to 8 do
InData[i+(j-1)*8]:=strtoint(s[i]);
end;

DEScrypt;

for i:=1 to 8 do
begin
s:='';
for j:=1 to 8 do
if OutData[j+(i-1)*8]=0 then s:=s+'0' else s:=s+'1';
Buf[i-1]:=bintoint(s);
end;

////////////////////////////

BlockWrite(tvux, Buf, SizeBuf);

for j:=0 to bss do
Buf0[j]:=Buf[j];

end;
end;


Повернутися наверх
  
 
 Заголовок повідомлення: Re: DES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 502
І в результаті нам знадобиться
form1
button1
edit1

і код для кнопки:
Код:

procedure TForm1.Button1Click(Sender: TObject);
begin

OpenDialog1.InitialDir:= ExtractFileDir(Application.ExeName);
if opendialog1.execute then
begin
  assignfile(tvxi,opendialog1.FileName);
  reset(tvxi);
      if savedialog1.execute then
      begin
      assignfile(tvux,savedialog1.FileName);
      rewrite(tvux);

      cipherCBC();

    closefile(tvxi);
    closefile(tvux);
      end;
end;
end;


Повернутися наверх
  
 
 Заголовок повідомлення: Re: DES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 502
Початковий блок заповнюється 0:
Код:
for i:=0 to bss do
Buf0[i]:=0;


Звісно, під час аналізу роботи алгоритму його можна заповнювати якими завгодно даними.

Якщо кому потрібен зібраний проект - напишіть тут.


Повернутися наверх
  
 
 Заголовок повідомлення: Re: DES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 282
Схема DES:

Зображення


Повернутися наверх
  
 
 Заголовок повідомлення: Re: DES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 1
Tariq писал(а):
Якщо кому потрібен зібраний проект - напишіть тут.


Доброго дня.
Зацікавив даний алгоритм, тому, якщо не важко, надішліть будь ласка ваш зібраний проект на адресу
[мейл видалено модератором. З метою вашої безпеки - ми не збираємо мейли користувачів.]

І ще у мене до вас 2 питання:
1) Якщо я у своєму проекті замість паролю використаю його md5-хеш, то які процедури, функції та константи будуть зайвими?
2) Яким чином доповнюється блок до 64 біт (8 байт), якщо текст не кратний 8 ?

Буду дуже вдячний за проект та відповіді.


Повернутися наверх
  
 
 Заголовок повідомлення: Re: DES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 21
vitaliy писал(а):
1) Якщо я у своєму проекті замість паролю використаю його md5-хеш, то які процедури, функції та константи будуть зайвими?
2) Яким чином доповнюється блок до 64 біт (8 байт), якщо текст не кратний 8 ?


1) Всі процедури будуть потрібні, мало того доведеться додавати модуль MD5. (Його знайдете тут).

2) Це залежить від програмної реалізації та режиму шифрування. Єдиної думки щодо безпечного доповнення немає.
Як правило доповнюється нульовими байтами (00 00 00 ... ) а в кінці ставиться число доданих байт. Але існує думка, що даний метод небезпечний, так як супротивник буде мати частину відкритого тексту (ВТ) для криптоаналізу..
Іноді пропонують нульові байти замінювати випадковими числами.


Повернутися наверх
  
 
 Заголовок повідомлення: Re: DES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 502
Проект
Приєднання файлів:
CBC DES.zip [3.72 KiB]
Скачали: 228

MD5 (CBC DES.zip) = "AB2F61C3FC9B2A207CBD98356AA66790"
SHA-1 (CBC DES.zip) = "CC8CB3B1D6F6241B66B5BCEC03FF0AB0C43B101E"


Повернутися наверх
  
 
 Заголовок повідомлення: Re: DES
СообщениеДодано: 09 гру 2014, 20:48 
Не в мережі

Повідомлень: 282
Якщо потрібна додаткова інформація - повідомте нас.


Повернутися наверх
  
 
 Заголовок повідомлення: Re: DES
СообщениеДодано: 20 лют 2016, 18:19 
Не в мережі

Повідомлень: 282
У прикладі R1expand - розширення 32 біт до 48 шляхом повторів деяких біт, за правилом
Код:
вхідні 32 біти:
__   01   02   03   04   __   __   05   06   07   08   09   __   __   10   11   12   13   __   __   14   15   16   17   __   __   18   19   20   21   __   __   22   23   24   25   __   __   26   27   28   29   30   __   __   31   32   __
32   01   02   03   04   05   04   05   06   07   08   09   08   09   10   11   12   13   12   13   14   15   16   17   16   17   18   19   20   21   20   21   22   23   24   25   24   25   26   27   28   29   28   29   30   31   32   01
01   02   03   04   05   06   07   08   09   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   33   34   35   36   37   38   39   40   41   42   43   44   45   46   47   48
на виході 48 біт


Повернутися наверх
  
 
Показати повідомлення за:  Сортувати по:  
Розпочати нову тему Відповісти  [ 17 повідомлень ] 

Часовий пояс: UTC десь + 2 години



cron
Роwеrеd bу рhрВB® аnd Hostinger web hosting