Використання сучасних симетричних DES і асиметричних алгоритмів шифрування RSA

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Використання сучасних симетричних (DES), і асиметричних (RSA) алгоритмів шифрування

Зміст

Постановка завдання

Теоретичний матеріал

Вихідні дані

Скріншоти роботи програми

Висновки

Постановка завдання

  1. Реалізувати алгоритм DES і 4 режими шифрування. Шифрування реалізувати для будь-якої довжини повідомлення і будь-якої довжини ключа до 56 біт включно.

  2. Зашифрувати повідомлення довжиною 1 МБ, 10 МБ, 20 МБ і ключем 5,6,7 байт. Для кожного режиму, довжини повідомлення і ключа заміряти час і швидкість зашифрування

  3. У режимах шифрування DES OFB і CFB розмір блоку шифрування брати рівним порядковому номеру в списку групи

  4. Реалізувати алгоритм RSA. Згенерувати 3 пари відкритий / закритий ключів. Брати файли розміром 20 Кб, 50 Кб, 100 Кб, 500 Кб, 1 МБ.

  5. Кожен файл шифрувати з 3 парами ключів. Порахувати час зашифрування / розшифрування і середню швидкість шифрування / розшифрування для кожної пари ключів і кожного файлу.

  6. Програма повинна передбачати збереження зашифрованого і розшифрованого файлу на диск, а також виведення на екран швидкості і часу шифрування.

Примітка.

  1. Оригінальний текст брати довільний, використовуючи символи з Алфавіту (Алфавіт брати з Таблиці 1, згідно Вашого варіанту)

  2. Ваш варіант = (Номер у списку групи) mod 23

  3. Букв ам поставити у відповідність числа [0 .. мощность_алфавіта-1] (наприклад букві а -> 0, б-> 1, в -> 2 ітд.)

Таблиця 1.

п / п

A

B

Алфавіт

15

2000

5000

Цифри, спецсимволи (@) і малі літери російського алфавіту

Теоретичний матеріал

Шифр RSA

Алгоритм RSA запропонували в 1978 р. три автора: Р. Райвест (Rivest), А. Шамір (Shamir) і А. Адлеман (Adleman). Алгоритм отримав свою назву за першими літерами прізвищ його авторів. Алгоритм RSA став першим повноцінним алгоритмом з відкритим ключем, який може працювати як в режимі шифрування даних, так і в режимі електронного цифрового підпису.

Надійність алгоритму грунтується на труднощі факторизації великих чисел і труднощі обчислення дискретних логарифмів.

У криптосистеме RSA відкритий ключ До A, секретний ключ До B, повідомлення М і криптограма З належать безлічі цілих чисел

Z N = {0,1,2 ,..., N-1} (1)

де N - модуль:

N = P * Q. (2)

Тут Р і Q - випадкові великі прості числа. Для забезпечення максимальної безпеки вибирають Р і Q рівної довжини і зберігають у секреті.

Безліч Z N з операціями додавання і множення за модулем N утворює арифметику по модулю N.

Відкритий ключ До A вибирають випадковим чином так, щоб виконувалися умови:



(3)

, (4)



де - функція Ейлера, яка вказує кількість позитивних цілих чисел в інтервалі від 1 до N, які взаємно прості з N.





Умова (4) означає, що відкритий ключ До A і функція Ейлера

повинні бути взаємно простими.

Далі, використовуючи розширений алгоритм Евкліда, обчислюють секретний ключ K B, такий, що



K B * До A = 1 (mod ( ) (5)



або



Це можна здійснити, так як отримувач У знає пару простих чисел (P, Q) і може легко знайти . Зауважимо, що K B і N повинні бути взаємно простими.

Відкритий ключ До A використовують для шифрування даних, а секретний ключ K B-для розшифрування.

Перетворення шифрування визначає криптограму С через пару (відкритий ключ До A, повідомлення М) відповідно до такої формули:



(6)

Звернення функції , Тобто визначення значення М по відомим значенням С, К A і N, практично не можливо при N> 2 512.

Однак зворотний завдання, тобто завдання розшифрування криптограми С, можна вирішити, використовуючи пару (секретний ключ K B, криптограма С) за такою формулою:



(7)

Процес розшифрування можна записати так:

D BА (М)) = М. (8)

Підставляючи в (8) значення (6) і (7), отримуємо:

Або

(9)



Величина відіграє важливу роль у теоремі Ейлера, яка стверджує, що якщо НОД (х, N) = 1, то

чи трохи більше загальній формі

(10)



Зіставляючи вираження (9) і (10), отримуємо

або, що те ж саме, .

Саме тому для обчислення секретного ключа K B використовують співвідношення (5).

Таким чином, якщо криптограму





звести до степеня K B, то в результаті відновлюється вихідний відкритий текст М, так як



Таким чином, одержувач В, який створює криптосистему, захищає два параметри: секретний ключ K B і пару чисел (P, Q), твір яких дає значення модуля N. З іншого боку, одержувач У відкриває значення модуля N і відкритий ключ К А.

Противнику відомі лише значення К А та N. Якщо б він зміг розкласти число N на множники Р і Q, то він дізнався б "потайний хід" - трійку чисел {Р, Q, К A}, обчислив значення функції Ейлера



і визначив значення секретного ключа K B.

Однак, як вже зазначалося, розкладання дуже великого N на множники обчислювально не можливо (за умови, що довжини вибраних Р і Q складають не менше 100 десяткових знаків).

Алгоритм шифрування і розшифрування в криптосистеме RSA

Припустимо, що користувач А хоче передати користувачеві У повідомлення в зашифрованому вигляді, використовуючи криптосистему RSA. У такому випадку користувач А виступає в ролі відправника повідомлення, а користувач В - в ролі одержувача. Як зазначалося вище, криптосистему RSA повинен сформувати одержувач повідомлення, тобто користувач В. Розглянемо послідовність дій користувача В ​​і користувача А.

1. Користувач У вибирає два довільних великих простих числа Р і Q.

2. Користувач У обчислює значення модуля N = Р * Q.

3. Користувач У обчислює функцію Ейлера (8):



4. Вибирає випадковим чином значення відкритого ключа К A з урахуванням виконання умов:



5. Користувач У обчислює значення секретного ключа k B, використовуючи розширений алгоритм Евкліда при вирішенні порівняння



6. Користувач У пересилає користувачеві А пару чисел (N, К A) по незахищеному каналу.

Якщо користувач А хоче передати користувачеві У повідомлення М, він виконує такі кроки.

7. Користувач А розбиває вихідний відкритий текст М на блоки, кожен з яких може бути представлений у вигляді числа



М i = 0,1,2 ,..., N-1.



8. Користувач А шифрує текст, представлений у вигляді послідовності чисел М, за формулою



9. Користувач А відправляє криптограму C 1, С 2, С 3 ,..., C i, ... користувачеві В.

10. Користувач У розшифровує прийняту криптограму C 1, С 2, С 3 ,..., C i, ..., використовуючи секретний ключ k B, за формулою

.



У результаті буде отримана послідовність чисел M i, які представляють собою вихідне повідомлення М. Щоб алгоритм RSA мав практичну цінність, необхідно мати можливість без істотних витрат генерувати великі прості числа, уміти оперативно обчислювати значення ключів До A і К B.

Шифр DES

DES здійснює шифрування 64-бітових блоків даних за допомогою 56-бітового ключа. Розшифрування в DES є операцією зворотного шифрування і виконується шляхом повторення операцій шифрування в зворотній послідовності (незважаючи на гадану очевидність, так робиться далеко не завжди. Пізніше ми розглянемо шифри, в яких шифрування і розшифрування здійснюються за різними алгоритмами).

Процес шифрування полягає в початковій перестановці бітів 64-бітового блоку, шістнадцяти циклах шифрування і, нарешті, зворотної перестановки бітів (рис.1).

Рис.1. Узагальнена схема шифрування в алгоритмі DES

Необхідно відразу ж зазначити, що ВСІ таблиці, наведені в цій статті, є стандартними, а отже повинні включатися у вашу реалізацію алгоритму в незмінному вигляді. Всі перестановки і коди в таблицях підібрані розробниками таким чином, щоб максимально утруднити процес розшифровки шляхом підбору ключа. Структура алгоритму DES наведена на рис.2.

Рис.2. Структура алгоритму шифрування DES



Нехай з файлу лічений черговий 8-байтовий блок T, який перетворюється за допомогою матриці початкової перестановки IP (табл.1) наступним чином: біт 58 блоку T стає бітом 1, біт 50 - бітом 2 і т.д., що дасть у результаті : T (0) = IP (T).

Отримана послідовність бітів T (0) поділяється на дві послідовності по 32 біта кожна: L (0) - ліві чи старші біти, R (0) - праві чи молодші біти.



Таблиця 1: Матриця початкової перестановки IP

58 50 42 34 26 18 10 02

60 52 44 36 28 20 12 04

62 54 46 38 30 22 14 06

64 56 48 40 32 24 16 08

57 49 41 33 25 17 09 01

59 51 43 35 27 19 11 03

61 53 45 37 29 21 13 05

63 55 47 39 31 23 15 07

Потім виконується шифрування, що складається з 16 ітерацій. Результат i-й ітерації описується такими формулами:

L (i) = R (i-1)

R (i) = L (i-1) xor f (R (i-1), K (i)),

де xor - операція ВИКЛЮЧАЄ АБО.

Функція f називається функцією шифрування. Її аргументи - це 32-бітова послідовність R (i-1), отримана на (i-1)-ої ітерації, і 48-бітовий ключ K (i), який є результатом перетворення 64-бітового ключа K. Докладно функція шифрування і алгоритм отримання ключів К (i) описані нижче.

На 16-й ітерації отримують послідовності R (16) і L (16) (без перестановки), які конкатеніруют в 64-бітову послідовність R (16) L (16).

Потім позиції бітів цієї послідовності переставляють відповідно до матриці IP -1 (табл.2).

Таблиця 2: Матриця зворотного перестановки IP -1

40 08 48 16 56 24 64 32

39 07 47 15 55 23 63 31

38 06 46 14 54 22 62 30

37 05 45 13 53 21 61 29

36 04 44 12 52 20 60 28

35 03 43 11 51 19 59 27

34 02 42 10 50 18 58 26

33 01 41 09 49 17 57 25

Матриці IP -1 і IP співвідносяться наступним чином: значення 1-го елемента матриці IP -1 дорівнює 40, а значення 40-го елемента матриці IP дорівнює 1, значення 2-го елемента матриці IP -1 дорівнює 8, а значення 8-го елемента матриці IP дорівнює 2 і т.д.

Процес розшифрування даних є інверсним по відношенню до процесу шифрування. Всі дії повинні бути виконані у зворотному порядку. Це означає, що розшифровуються дані спочатку переставляються відповідно до матриці IP -1, а потім над послідовністю біт R (16) L (16) виконуються ті ж дії, що і в процесі шифрування, але в зворотному порядку.

Ітеративний процес розшифрування може бути описаний наступними формулами:

R (i-1) = L (i), i = 1, 2, ..., 16;

L (i-1) = R (i) xor f (L (i), K (i)), i = 1, 2, ..., 16.

На 16-й ітерації отримують послідовності L (0) і R (0), які конкатеніруют в 64-бітову послідовність L (0) R (0).

Потім позиції бітів цієї послідовності переставляють відповідно до матриці IP. Результат такої перестановки - вихідна 64-бітова послідовність.

Тепер розглянемо функцію шифрування f (R (i-1), K (i)). Схематично вона показана на рис. 3.

Рис.3. Обчислення функції f (R (i-1), K (i))



Для обчислення значення функції f використовуються наступні функції-матриці:

  • Е - розширення 32-бітової послідовності до 48-бітової,

  • S1, S2, ... , S8 - перетворення 6-бітового блоку в 4-бітовий,

  • Р - перестановка біт в 32-бітової послідовності.

Функція розширення Е визначається табл.3. Відповідно до цієї таблиці перші 3 біта Е (R (i-1)) - це біти 32, 1 і 2, а останні - 31, 32 і 1.

Таблиця 3: Функція розширення E

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

Результат функції Е (R (i-1)) є 48-бітова послідовність, яка складається по модулю 2 (операція xor) з 48-бітовим ключем К (i). Виходить 48-бітова послідовність, яка розбивається на вісім 6-бітових блоків B (1) B (2) B (3) B (4) B (5) B (6) B (7) B (8). Тобто:

E (R (i-1)) xor K (i) = B (1) B (2) ... B (8).

Функції S1, S2, ... , S8 визначаються табл.4.

Таблиця 4

Функції перетворення S1, S2, ..., S8


Номер стовпця

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15



Н

про

м

е

р


з

т

р

про

до

і

0

1

2

3

14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7

0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8

4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0

15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13

S1



0

1

2

3

15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10

3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5

0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15

13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9

S2



0

1

2

3

10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8

13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 січня

13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7

1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12

S3



0

1

2

3

7 13 14 3 0 ​​6 9 10 1 2 8 5 11 12 4 15

13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9

10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 квітня

3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14

S4



0

1

2

3

2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9

14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6

4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14

11 8 12 7 1 14 2 13 6 15 0 9 10 4 3 травня

S5



0

1

2

3

12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11

10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8

9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6

4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13

S6



0

1

2

3

4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1

13 0 11 7 4 9 1 10 14 3 5 12 2 15 6 серпня

1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2

6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12

S7



0

1

2

3

13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7

1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2

7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8

2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11

S8



До табл.4. потрібні додаткові пояснення. Нехай на вхід функції-матриці Sj надходить 6-бітовий блок B (j) = b1b2b3b4b5b6, тоді двухбітовое число b1b6 вказує номер рядка матриці, а b2b3b4b5 - номер стовпця. Результатом Sj (B (j)) буде 4-бітовий елемент, розташований на перетині зазначених рядка і стовпця.

Наприклад, В (1) = 011 011. Тоді S1 (В (1)) розташований на перетині рядка 1 і стовпчика 13. У стовпці 13 рядка 1 задано значення 5. Значить, S1 (011011) = 0101.

Застосувавши операцію вибору до кожного з 6-бітових блоків B (1), B (2), ..., B (8), отримуємо 32-бітову послідовність S1 (B (1)) S2 (B (2)) S3 ( B (3 ))... S8 (B (8)).

Нарешті, для отримання результату функції шифрування треба переставити біти цієї послідовності. Для цього застосовується функція перестановки P (табл.5). У вхідній послідовності біти переставляється так, щоб біт 16 став бітом 1, а біт 7 - бітом 2 і т.д.

Таблиця 5: Функція перестановки P

16 07 20 21

29 12 28 17

01 15 23 26

05 18 31 10

02 08 24 14

32 27 03 09

19 13 30 06

22 11 04 25

Таким чином,

f (R (i-1), K (i)) = P (S1 (B (1 )),... S8 (B (8)))

Щоб завершити опис алгоритму шифрування даних, залишилося привести алгоритм отримання 48-бітових ключів К (i), i = 1 ... 16. На кожній ітерації використовується нове значення ключа K (i), що обчислюється з початкового ключа K. K представляє собою 64-бітовий блок з вісьмома бітами контролю по парності, розташованими в позиціях 8,16,24,32,40,48,56,64.

Для видалення контрольних бітів і перестановки інших використовується функція G початкової підготовки ключа (табл.6).

Таблиця 6

Матриця G початкової підготовки ключа

57 49 41 33 25 17 09

01 58 50 42 34 26 18

10 02 59 51 43 35 27

19 11 03 60 52 44 36

63 55 47 39 31 23 15

07 62 54 46 38 30 22

14 06 61 53 45 37 29

21 13 05 28 20 12 04

Результат перетворення G (K) розбивається на два 28-бітових блоку C (0) і D (0), причому C (0) буде складатися з бітів 57, 49, ..., 44, 36 ключа K, а D (0 ) складатиметься з бітів 63, 55, ..., 12, 4 ключа K. Після визначення C (0) і D (0) рекурсивно визначаються C (i) і D (i), i = 1 ... 16. Для цього застосовують циклічний зсув вліво на один або два біти в залежності від номера ітерації, як показано в табл.7.

Таблиця 7

Таблиця зрушень для обчислення ключа



01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16


1

1

2

2

2

2

2

2

1

2

2

2

2

2

2

1


Номер ітерації

Зрушення (біт)



Отримане значення знов "перемішується" відповідно до матриці H (табл.8).


Таблиця 8:

Матриця H завершальній обробки ключа

14 17 11 24 01 05

03 28 15 06 21 10

23 19 12 04 26 08

16 07 27 20 13 02

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 (i) буде складатися з бітів 14, 17, ..., 29, 32 послідовності C (i) D (i). Таким чином:


K (i) = H (C (i) D (i))


Блок-схема алгоритму обчислення ключа наведена на рис.4.


Рис.4. Блок-схема алгоритму обчислення ключа K (i)



Відновлення вихідного тексту здійснюється за таким же алгоритмом, що і для шифрування, однак спочатку використовується ключ
K (16), потім - K (15) і так далі.

Вихідні дані


Для шифру RSA використовувався алфавіт

0123456789 @ абвгдеежзиклмнопрстуфхцчшщъыьэюя

Текст у файлах складається з повторень фраз

У миску кашу зі стін відскребіть

в @ миску @ кашею @


Текст програми



unit main;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ComCtrls, DES_unit, Podkluchi_unit, DES_ECB_CBC_unit, RSA_unit;


type

TForm1 = class (TForm)

Button17: TButton;

Label28: TLabel;

Label29: TLabel;

Label30: TLabel;

Label31: TLabel;

Label32: TLabel;

Label33: TLabel;

Label34: TLabel;

Edit10: TEdit;

Edit11: TEdit;

Edit12: TEdit;

Button18: TButton;

Button19: TButton;

Button20: TButton;

Button21: TButton;

Button22: TButton;

Edit1: TEdit;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Button5: TButton;

Button6: TButton;

Label5: TLabel;

Button7: ​​TButton;

Button8: TButton;

RadioButton6: TRadioButton;

RadioButton7: ​​TRadioButton;

RadioButton8: TRadioButton;

RadioButton9: TRadioButton;

RadioButton10: TRadioButton;

Button9: TButton;

Edit4: TEdit;

Edit5: TEdit;

ListBox3: TListBox;

Button10: TButton;

ListBox4: TListBox;

Label12: TLabel;

Label13: TLabel;

Label14: TLabel;

Label15: TLabel;

Label36: TLabel;

Label37: TLabel;

Label38: TLabel;

GroupBox1: TGroupBox;

GroupBox2: TGroupBox;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

procedure Button1Click (Sender: TObject);

procedure Button2Click (Sender: TObject);

procedure Button3Click (Sender: TObject);

procedure Button4Click (Sender: TObject);

procedure Button5Click (Sender: TObject);

procedure Button6Click (Sender: TObject);

procedure Button7Click (Sender: TObject);

procedure Button8Click (Sender: TObject);

procedure Button9Click (Sender: TObject);

procedure Button10Click (Sender: TObject);

procedure Button11Click (Sender: TObject);

procedure Button12Click (Sender: TObject);

procedure FormCreate (Sender: TObject);

procedure Button13Click (Sender: TObject);

procedure Button14Click (Sender: TObject);

procedure Button15Click (Sender: TObject);

procedure Button16Click (Sender: TObject);

private

{Private declarations}

public

{Public declarations}

end;


var

Form1: TForm1;


implementation


{$ R *. dfm}

/ / Zawifrovanie failov klju4om na 5 bait

procedure TForm1.Button1Click (Sender: TObject);

var

klu4: string;

t1, t2: TDateTime;

vremja: integer;

razmer: integer;

begin

klu4: = Edit10.text;

while (Length (klu4) <8) do

klu4: = klu4 + 0 ";

Formirovanie_16_podklju4ei (klu4);

razmer: = 0;

t1: = Time;


if Form1.RadioButton10.Checked = true then

begin

Wifrovanie_ECB ('20. Txt ',' DES_crypted \ Z_20_5_ECB.txt ');

razmer: = 1024 * 20;

end;

if Form1.RadioButton9.Checked = true then

begin

Wifrovanie_ECB ("50. Txt ',' DES_crypted \ Z_50_5_ECB.txt ');

razmer: = 1024 * 50;

end;

if Form1.RadioButton8.Checked = true then

begin

Wifrovanie_ECB ('100. Txt ',' DES_crypted \ Z_100_5_ECB.txt ');

razmer: = 1024 * 100;

end;

if Form1.RadioButton7.Checked = true then

begin

Wifrovanie_ECB ('500. Txt ',' DES_crypted \ Z_500_5_ECB.txt ');

razmer: = 1024 * 500;

end;

if Form1.RadioButton6.Checked = true then

begin

Wifrovanie_ECB ('1. Txt ',' DES_crypted \ Z_1_5_ECB.txt ');

razmer: = 1024 * 1024;

end;


t2: = Time;

vremja: = round ((t2 - t1) * 24 * 60 * 60) +1;

Label33.Caption: = IntToStr (vremja-1) + 'сек';


Label34.Caption: = FloatToStr ((razmer / vremja) -1) + 'байт / сек';

end;


/ / Raswifrovanie failov klju4om na 5 bait

procedure TForm1.Button2Click (Sender: TObject);

var

klu4: string;

t1, t2: TDateTime;

vremja: integer;

razmer: integer;

begin

klu4: = Edit10.text;

razmer: = 0;

while (Length (klu4) <8) do

klu4: = klu4 + 0 ";

Formirovanie_16_podklju4ei (klu4);


t1: = Time;


if Form1.RadioButton10.Checked = true then

begin

Raswifrovanie_ECB ('DES_crypted \ Z_20_5_ECB.txt', 'DES_uncrypted \ R_20_5_ECB.txt');

razmer: = 1024 * 20;

end;

if Form1.RadioButton9.Checked = true then

begin

Raswifrovanie_ECB ('DES_crypted \ Z_50_5_ECB.txt', 'DES_uncrypted \ R_50_5_ECB.txt');

razmer: = 1024 * 50;

end;

if Form1.RadioButton8.Checked = true then

begin

Raswifrovanie_ECB ('DES_crypted \ Z_100_5_ECB.txt', 'DES_uncrypted \ R_100_5_ECB.txt');

razmer: = 1024 * 100;

end;

if Form1.RadioButton7.Checked = true then

begin

Raswifrovanie_ECB ('DES_crypted \ Z_500_5_ECB.txt', 'DES_uncrypted \ R_500_5_ECB.txt');

razmer: = 1024 * 500;

end;

if Form1.RadioButton6.Checked = true then

begin

Raswifrovanie_ECB ('DES_crypted \ Z_1_5_ECB.txt', 'DES_uncrypted \ R_1_5_ECB.txt');

razmer: = 1024 * 1024;

end;


t2: = Time;

vremja: = round ((t2 - t1) * 24 * 60 * 60) +1;

Label33.Caption: = IntToStr (vremja-1) + 'сек';


Label34.Caption: = FloatToStr (razmer/vremja-1) + 'байт / сек';

end;


/ / Zawifrovanie failov klju4om na 6 bait

procedure TForm1.Button3Click (Sender: TObject);

var

klu4: string;

t1, t2: TDateTime;

vremja: integer;

razmer: integer;

begin

klu4: = Edit11.text;

while (Length (klu4) <8) do

klu4: = klu4 + 0 ";

Formirovanie_16_podklju4ei (klu4);


t1: = Time;


if Form1.RadioButton10.Checked = true then

begin

Wifrovanie_ECB ('20. Txt ',' DES_crypted \ Z_20_6_ECB.txt ');

razmer: = 1024 * 20;

end;

if Form1.RadioButton9.Checked = true then

begin

Wifrovanie_ECB ("50. Txt ',' DES_crypted \ Z_50_6_ECB.txt ');

razmer: = 1024 * 50;

end;

if Form1.RadioButton8.Checked = true then

begin

Wifrovanie_ECB ('100. Txt ',' DES_crypted \ Z_100_6_ECB.txt ');

razmer: = 1024 * 100;

end;

if Form1.RadioButton7.Checked = true then

begin

Wifrovanie_ECB ('500. Txt ',' DES_crypted \ Z_500_6_ECB.txt ');

razmer: = 1024 * 500;

end;

if Form1.RadioButton6.Checked = true then

begin

Wifrovanie_ECB ('1. Txt ',' DES_crypted \ Z_1_6_ECB.txt ');

razmer: = 1024 * 1024;

end;


t2: = Time;

vremja: = round ((t2 - (t1)) * 24 * 60 * 60) +1;

Label33.Caption: = IntToStr (vremja-1) + 'сек';


Label34.Caption: = FloatToStr (razmer/vremja-1) + 'байт / сек';

end;


/ / Raswifrovanie failov klju4om na 6 bait

procedure TForm1.Button4Click (Sender: TObject);

var

klu4: string;

t1, t2: TDateTime;

vremja: integer;

razmer: integer;

begin

klu4: = Edit11.text;

while (Length (klu4) <8) do

klu4: = klu4 + 0 ";

Formirovanie_16_podklju4ei (klu4);


t1: = Time;


if Form1.RadioButton10.Checked = true then

begin

Raswifrovanie_ECB ('DES_crypted \ Z_20_6_ECB.txt', 'DES_uncrypted \ R_20_6_ECB.txt');

razmer: = 1024 * 20;

end;

if Form1.RadioButton9.Checked = true then

begin

Raswifrovanie_ECB ('DES_crypted \ Z_50_6_ECB.txt', 'DES_uncrypted \ R_50_6_ECB.txt');

razmer: = 1024 * 50;

end;

if Form1.RadioButton8.Checked = true then

begin

Raswifrovanie_ECB ('DES_crypted \ Z_100_6_ECB.txt', 'DES_uncrypted \ R_100_6_ECB.txt');

razmer: = 1024 * 100;

end;

if Form1.RadioButton7.Checked = true then

begin

Raswifrovanie_ECB ('DES_crypted \ Z_500_6_ECB.txt', 'DES_uncrypted \ R_500_6_ECB.txt');

razmer: = 1024 * 500;

end;

if Form1.RadioButton6.Checked = true then

begin

Raswifrovanie_ECB ('DES_crypted \ Z_1_6_ECB.txt', 'DES_uncrypted \ R_1_6_ECB.txt');

razmer: = 1024 * 1024;

end;


t2: = Time;

vremja: = round ((t2 - t1) * 24 * 60 * 60) +1;

Label33.Caption: = IntToStr (vremja-1) + 'сек';

Label34.Caption: = FloatToStr (razmer/vremja-1) + 'байт / сек';

end;


/ / Zawifrovanie failov klju4om na 7 bait

procedure TForm1.Button5Click (Sender: TObject);

var

klu4: string;

t1, t2: TDateTime;

vremja: integer;

razmer: integer;

begin

klu4: = Edit12.text;

while (Length (klu4) <8) do

klu4: = klu4 + 0 ";

Formirovanie_16_podklju4ei (klu4);


t1: = Time;


if Form1.RadioButton10.Checked = true then

begin

Wifrovanie_ECB ('20. Txt ',' DES_crypted \ Z_20_7_ECB.txt ');

razmer: = 1024 * 20;

end;

if Form1.RadioButton9.Checked = true then

begin

Wifrovanie_ECB ("50. Txt ',' DES_crypted \ Z_50_7_ECB.txt ');

razmer: = 1024 * 50;

end;

if Form1.RadioButton8.Checked = true then

begin

Wifrovanie_ECB ('100. Txt ',' DES_crypted \ Z_100_7_ECB.txt ');

razmer: = 1024 * 100;

end;

if Form1.RadioButton7.Checked = true then

begin

Wifrovanie_ECB ('500. Txt ',' DES_crypted \ Z_500_7_ECB.txt ');

razmer: = 1024 * 500;

end;

if Form1.RadioButton6.Checked = true then

begin

Wifrovanie_ECB ('1. Txt ',' DES_crypted \ Z_1_7_ECB.txt ');

razmer: = 1024 * 1024;

end;


t2: = Time;

vremja: = round ((t2 - t1) * 24 * 60 * 60) +1;

Label33.Caption: = IntToStr (vremja-1) + 'сек';


Label34.Caption: = FloatToStr (razmer/vremja-1) + 'байт / сек';

end;


/ / Raswifrovanie failov klju4om na 7 bait

procedure TForm1.Button6Click (Sender: TObject);

var

klu4: string;

t1, t2: TDateTime;

vremja: integer;

razmer: integer;

begin

klu4: = Edit12.text;

while (Length (klu4) <8) do

klu4: = klu4 + 0 ";

Formirovanie_16_podklju4ei (klu4);


t1: = Time;


if Form1.RadioButton10.Checked = true then

begin

Raswifrovanie_ECB ('DES_crypted \ Z_20_7_ECB.txt', 'DES_uncrypted \ R_20_7_ECB.txt');

razmer: = 1024 * 20;

end;

if Form1.RadioButton9.Checked = true then

begin

Raswifrovanie_ECB ('DES_crypted \ Z_50_7_ECB.txt', 'DES_uncrypted \ R_50_7_ECB.txt');

razmer: = 1024 * 50;

end;

if Form1.RadioButton8.Checked = true then

begin

Raswifrovanie_ECB ('DES_crypted \ Z_100_7_ECB.txt', 'DES_uncrypted \ R_100_7_ECB.txt');

razmer: = 1024 * 100;

end;

if Form1.RadioButton7.Checked = true then

begin

Raswifrovanie_ECB ('DES_crypted \ Z_500_7_ECB.txt', 'DES_uncrypted \ R_500_7_ECB.txt');

razmer: = 1024 * 500;

end;

if Form1.RadioButton6.Checked = true then

begin

Raswifrovanie_ECB ('DES_crypted \ Z_1_7_ECB.txt', 'DES_uncrypted \ R_1_7_ECB.txt');

razmer: = 1024 * 1024;

end;


t2: = Time;

vremja: = round ((t2 - t1) * 24 * 60 * 60) +1;

Label33.Caption: = IntToStr (vremja-1) + 'сек';


Label34.Caption: = FloatToStr (razmer/vremja-1) + 'байт / сек';

end;



/ / CBC zawifrovanie failov klju4om na 5 bait

procedure TForm1.Button7Click (Sender: TObject);

var

klu4: string;

vektor: string;

t1, t2: TDateTime;

vremja: integer;

razmer: integer;

begin

klu4: = Edit10.text;

while (Length (klu4) <8) do

klu4: = klu4 + '*';

Formirovanie_16_podklju4ei (klu4);


vektor: = Edit1.text;

while (Length (vektor) <8) do

vektor: = vektor + 0 ";


t1: = Time;


if Form1.RadioButton10.Checked = true then

begin

Wifrovanie_CBC ('20. Txt ',' DES_crypted \ Z_20_5_CB С. Txt ', vektor);

razmer: = 1024 * 20;

end;

if Form1.RadioButton9.Checked = true then

begin

Wifrovanie_CBC ("50. Txt ',' DES_crypted \ Z_50_5_CB С. Txt ', vektor);

razmer: = 1024 * 50;

end;

if Form1.RadioButton8.Checked = true then

begin

Wifrovanie_CBC ('100. Txt ',' DES_crypted \ Z_100_5_CB С. Txt ', vektor);

razmer: = 1024 * 100;

end;

if Form1.RadioButton7.Checked = true then

begin

Wifrovanie_CBC ('500. Txt ',' DES_crypted \ Z_500_5_CB С. Txt ', vektor);

razmer: = 1024 * 500;

end;

if Form1.RadioButton6.Checked = true then

begin

Wifrovanie_CBC ('1. Txt ',' DES_crypted \ Z_1_5_CB С. Txt ', vektor);

razmer: = 1024 * 1024;

end;


t2: = Time;

vremja: = round ((t2 - t1) * 24 * 60 * 60) +1;

Label34.Caption: = IntToStr (vremja-1) + 'сек';


Label34.Caption: = FloatToStr (razmer/vremja-1) + 'байт / сек';

end;

/ / CBC raswifrovanie failov klju4om na 5 bait

procedure TForm1.Button8Click (Sender: TObject);

var

klu4: string;

vektor: string;

t1, t2: TDateTime;

vremja: integer;

razmer: integer;

begin

klu4: = Edit10.text;

while (Length (klu4) <8) do

klu4: = klu4 + '*';

Formirovanie_16_podklju4ei (klu4);


vektor: = Edit1.text;

while (Length (vektor) <8) do

vektor: = vektor + 0 ";


t1: = Time;


if Form1.RadioButton10.Checked = true then

begin

Raswifrovanie_CBC ('DES_crypted \ Z_20_5_CB С. Txt', 'DES_uncrypted \ R_20_5_CB С. Txt', vektor);

razmer: = 1024 * 20;

end;

if Form1.RadioButton9.Checked = true then

begin

Raswifrovanie_CBC ('DES_crypted \ Z_50_5_CB С. Txt', 'DES_uncrypted \ R_50_5_CB С. Txt', vektor);

razmer: = 1024 * 50;

end;

if Form1.RadioButton8.Checked = true then

begin

Raswifrovanie_CBC ('DES_crypted \ Z_100_5_CB С. Txt', 'DES_uncrypted \ R_100_5_CB С. Txt', vektor);

razmer: = 1024 * 100;

end;

if Form1.RadioButton7.Checked = true then

begin

Raswifrovanie_CBC ('DES_crypted \ Z_500_5_CB С. Txt', 'DES_uncrypted \ R_500_5_CB С. Txt', vektor);

razmer: = 1024 * 500;

end;

if Form1.RadioButton6.Checked = true then

begin

Raswifrovanie_CBC ('DES_crypted \ Z_1_5_CB С. Txt', 'DES_uncrypted \ R_1_5_CB С. Txt', vektor);

razmer: = 1024 * 1024;

end;


t2: = Time;

vremja: = round ((t2 - t1) * 24 * 60 * 60) +1;

Label33.Caption: = IntToStr (vremja-1) + 'сек';


Label34.Caption: = FloatToStr (razmer/vremja-1) + 'байт / сек';

end;

/ / CBC zawifrovanie failov klju4om na 6 bait

procedure TForm1.Button9Click (Sender: TObject);

var

klu4: string;

vektor: string;

t1, t2: TDateTime;

vremja: integer;

razmer: integer;

begin

klu4: = Edit11.text;

while (Length (klu4) <8) do

klu4: = klu4 + '*';

Formirovanie_16_podklju4ei (klu4);


vektor: = Edit1.text;

while (Length (vektor) <8) do

vektor: = vektor + 0 ";


t1: = Time;


if Form1.RadioButton10.Checked = true then

begin

Wifrovanie_CBC ('20. Txt ',' DES_crypted \ Z_20_6_CB С. Txt ', vektor);

razmer: = 1024 * 20;

end;

if Form1.RadioButton9.Checked = true then

begin

Wifrovanie_CBC ("50. Txt ',' DES_crypted \ Z_50_6_CB С. Txt ', vektor);

razmer: = 1024 * 50;

end;

if Form1.RadioButton8.Checked = true then

begin

Wifrovanie_CBC ('100. Txt ',' DES_crypted \ Z_100_6_CB С. Txt ', vektor);

razmer: = 1024 * 100;

end;

if Form1.RadioButton7.Checked = true then

begin

Wifrovanie_CBC ('500. Txt ',' DES_crypted \ Z_500_6_CB С. Txt ', vektor);

razmer: = 1024 * 500;

end;

if Form1.RadioButton6.Checked = true then

begin

Wifrovanie_CBC ('1. Txt ',' DES_crypted \ Z_1_6_CB С. Txt ', vektor);

razmer: = 1024 * 1024;

end;


t2: = Time;

vremja: = round ((t2 - t1) * 24 * 60 * 60) +1;

Label33.Caption: = IntToStr (vremja-1) + 'сек';


Label34.Caption: = FloatToStr (razmer/vremja-1) + 'байт / сек';

end;


/ / CBC raswifrovanie failov klju4om na 6 bait

procedure TForm1.Button10Click (Sender: TObject);

var

klu4: string;

vektor: string;

t1, t2: TDateTime;

vremja: integer;

razmer: integer;

begin

klu4: = Edit11.text;

while (Length (klu4) <8) do

klu4: = klu4 + '*';

Formirovanie_16_podklju4ei (klu4);


vektor: = Edit1.text;

while (Length (vektor) <8) do

vektor: = vektor + 0 ";


t1: = Time;


if Form1.RadioButton10.Checked = true then

begin

Raswifrovanie_CBC ('DES_crypted \ Z_20_6_CB С. Txt', 'DES_uncrypted \ R_20_6_CB С. Txt', vektor);

razmer: = 1024 * 20;

end;

if Form1.RadioButton9.Checked = true then

begin

Raswifrovanie_CBC ('DES_crypted \ Z_50_6_CB С. Txt', 'DES_uncrypted \ R_50_6_CB С. Txt', vektor);

razmer: = 1024 * 50;

end;

if Form1.RadioButton8.Checked = true then

begin

Raswifrovanie_CBC ('DES_crypted \ Z_100_6_CB С. Txt', 'DES_uncrypted \ R_100_6_CB С. Txt', vektor);

razmer: = 1024 * 100;

end;

if Form1.RadioButton7.Checked = true then

begin

Raswifrovanie_CBC ('DES_crypted \ Z_500_6_CB С. Txt', 'DES_uncrypted \ R_500_6_CB С. Txt', vektor);

razmer: = 1024 * 500;

end;

if Form1.RadioButton6.Checked = true then

begin

Raswifrovanie_CBC ('DES_crypted \ Z_1_6_CB С. Txt', 'DES_uncrypted \ R_1_6_CB С. Txt', vektor);

razmer: = 1024 * 1024;

end;


t2: = Time;

vremja: = round ((t2 - t1) * 24 * 60 * 60);

Label33.Caption: = IntToStr (vremja) + 'сек';


Label34.Caption: = FloatToStr (razmer / vremja) + 'байт / сек';

end;

/ / CBC zawifrovanie failov klju4om na 7 bait

procedure TForm1.Button11Click (Sender: TObject);

var

klu4: string;

vektor: string;

t1, t2: TDateTime;

vremja: integer;

razmer: integer;

begin

klu4: = Edit12.text;

while (Length (klu4) <8) do

klu4: = klu4 + '*';

Formirovanie_16_podklju4ei (klu4);


vektor: = Edit1.text;

while (Length (vektor) <8) do

vektor: = vektor + 0 ";


t1: = Time;


if Form1.RadioButton10.Checked = true then

begin

Wifrovanie_CBC ('20. Txt ',' DES_crypted \ Z_20_7_CB С. Txt ', vektor);

razmer: = 1024 * 20;

end;

if Form1.RadioButton9.Checked = true then

begin

Wifrovanie_CBC ("50. Txt ',' DES_crypted \ Z_50_7_CB С. Txt ', vektor);

razmer: = 1024 * 50;

end;

if Form1.RadioButton8.Checked = true then

begin

Wifrovanie_CBC ('100. Txt ',' DES_crypted \ Z_100_7_CB С. Txt ', vektor);

razmer: = 1024 * 100;

end;

if Form1.RadioButton7.Checked = true then

begin

Wifrovanie_CBC ('500. Txt ',' DES_crypted \ Z_500_7_CB С. Txt ', vektor);

razmer: = 1024 * 500;

end;

if Form1.RadioButton6.Checked = true then

begin

Wifrovanie_CBC ('1. Txt ',' DES_crypted \ Z_1_7_CB С. Txt ', vektor);

razmer: = 1024 * 1024;

end;


t2: = Time;

vremja: = round ((t2 - t1) * 24 * 60 * 60) +1;

Label33.Caption: = IntToStr (vremja-1) + 'сек';


Label34.Caption: = FloatToStr (razmer/vremja-1) + 'байт / сек';

end;


/ / CBC raswifrovanie failov klju4om na 7 bait

procedure TForm1.Button12Click (Sender: TObject);

var

klu4: string;

vektor: string;

t1, t2: TDateTime;

vremja: integer;

razmer: integer;

begin

klu4: = Edit12.text;

while (Length (klu4) <8) do

klu4: = klu4 + '*';

Formirovanie_16_podklju4ei (klu4);


vektor: = Edit1.text;

while (Length (vektor) <8) do

vektor: = vektor + 0 ";


t1: = Time;


if Form1.RadioButton10.Checked = true then

begin

Raswifrovanie_CBC ('DES_crypted \ Z_20_7_CB С. Txt', 'DES_uncrypted \ R_20_7_CB С. Txt', vektor);

razmer: = 1024 * 20;

end;

if Form1.RadioButton9.Checked = true then

begin

Raswifrovanie_CBC ('DES_crypted \ Z_50_7_CB С. Txt', 'DES_uncrypted \ R_50_7_CB С. Txt', vektor);

razmer: = 1024 * 50;

end;

if Form1.RadioButton8.Checked = true then

begin

Raswifrovanie_CBC ('DES_crypted \ Z_100_7_CB С. Txt', 'DES_uncrypted \ R_100_7_CB С. Txt', vektor);

razmer: = 1024 * 100;

end;

if Form1.RadioButton7.Checked = true then

begin

Raswifrovanie_CBC ('DES_crypted \ Z_500_7_CB С. Txt', 'DES_uncrypted \ R_500_7_CB С. Txt', vektor);

razmer: = 1024 * 500;

end;

if Form1.RadioButton6.Checked = true then

begin

Raswifrovanie_CBC ('DES_crypted \ Z_1_7_CB С. Txt', 'DES_uncrypted \ R_1_7_CB С. Txt', vektor);

razmer: = 1024 * 1024;

end;


t2: = Time;

vremja: = round ((t2 - t1) * 24 * 60 * 60);

Label33.Caption: = IntToStr (vremja) + 'сек';


Label34.Caption: = FloatToStr (razmer / vremja) + 'байт / сек';

end;


/ / S4itivaem alfavit dlja RSA

procedure TForm1.FormCreate (Sender: TObject);

begin

alf: = Form1.Label38.Caption;

end;


/ / Generacija prostih 4isel s pomowiju reweta Eratosfena

procedure TForm1.Button13Click (Sender: TObject);

const

n = 5000;

var

a: array [2 .. n] of boolean;

i, j: integer;

begin


for i: = 2 to n do

a [i]: = false;


for i: = 2 to n do

begin

if (a [i] = false) then

begin

j: = 2;

while i * j <= n do

begin

a [i * j]: = true;

j: = j +1;

end;

end;

end;


ListBox4.Clear;


for i: = 1 to n do

begin

if (a [i] = false) then

ListBox4.Items.Add (IntToStr (i));

end;


end;


/ / Generacija vozmognih variantov klju4a Ka

procedure TForm1.Button14Click (Sender: TObject);

var

i: integer;

f: int64; / / 4islo vzaimno prostih 4isel s N

N, P, Q: int64;

x, y: int64;

k: integer;

begin

P: = StrToInt (Edit5.Text);

Q: = StrToInt (Edit4.Text);

N: = Q * P;


/ / Vi4isljaem koli4estvo vzaimno prostih s N 4isel

f: = (P-1) * (Q-1);


/ / Vivodim vse vozmognie Ka

ListBox3.Clear;

k: = 0;

for i: = (f div 2) to f do

begin

if (NOD (i, f, x, y) = 1) then

begin

ListBox3.Items.Add (IntToStr (i));

inc (k);

if k = 100 then

break;

end;

end;

end;

/ / Zawifrovanie failov klju4om Ka

procedure TForm1.Button15Click (Sender: TObject);

var

Ka: int64;

Kb: int64;

Q, P: int64;

i: integer;

t1, t2: TDateTime;

vremja: integer;

razmer: integer;

begin

P: = StrToInt (Edit5.Text); / / S4itivaem P

Q: = StrToInt (Edit4.Text); / / S4itivaem Q


if (ListBox3.ItemIndex <> -1) then

begin

Ka: = StrToInt (ListBox3.Items [ListBox3.ItemIndex ]);// Opredeljaem sly4ainim obrazom Ka

Kb: = -1;


t1: = Time;


if Form1.RadioButton10.Checked = true then

begin

Wifrovanie_RSA (Ka, P, Q, '20RSA. Txt ',' RSA_crypted \ Z_20_RSA.txt ', Kb);

razmer: = 1024 * 20;

end;

if Form1.RadioButton9.Checked = true then

begin

Wifrovanie_RSA (Ka, P, Q, '50RSA. Txt ',' RSA_crypted \ Z_50_RSA.txt ', Kb);

razmer: = 1024 * 50;

end;

if Form1.RadioButton8.Checked = true then

begin

Wifrovanie_RSA (Ka, P, Q, '100RSA. Txt ',' RSA_crypted \ Z_100_RSA.txt ', Kb);

razmer: = 1024 * 100;

end;

if Form1.RadioButton7.Checked = true then

begin

Wifrovanie_RSA (Ka, P, Q, '500RSA. Txt ',' RSA_crypted \ Z_500_RSA.txt ', Kb);

razmer: = 1024 * 500;

end;

if Form1.RadioButton6.Checked = true then

begin

Wifrovanie_RSA (Ka, P, Q, '1 RSA.txt ',' RSA_crypted \ Z_1_RSA.txt ', Kb);

razmer: = 1024 * 1024;

end;


t2: = Time;

end;


Label13.Caption: = IntToStr (Ka);; / / Vivodin Ka

Label12.Caption: = IntToStr (Kb); / / Vivodim Kb


vremja: = round ((t2 - (t1 +0.0000001)) * 24 * 60 * 60 * 1000);

Label33.Caption: = (IntToStr (vremja-round (0.0000001))) + 'мілісек';


Label34.Caption: = FloatToStr ((razmer / vremja) -0.0000001) + 'байт / мілісек';

end;


/ / Raswifrovat faili klju4om Ka1

procedure TForm1.Button16Click (Sender: TObject);

var

Ka: int64;

Kb: int64;

Q, P: int64;

i: integer;

ish_f, vihod_f: TextFile;

t1, t2: TDateTime;

vremja: integer;

razmer: integer;

begin


P: = StrToInt (Edit5.Text); / / S4itivaem P

Q: = StrToInt (Edit4.Text); / / S4itivaem Q


if (ListBox3.ItemIndex <> -1) then

begin

Ka: = StrToInt (ListBox3.Items [ListBox3.ItemIndex ]);// Opredeljaem sly4ainim obrazom Ka

Kb: = StrToInt (Label12.Caption);


t1: = Time;


if Form1.RadioButton10.Checked = true then

begin

Raswifrovanie_RSA (Kb, P, Q, 'RSA_crypted \ Z_20_RSA.txt', 'RSA_uncrypted \ R_20_RSA.txt');

razmer: = 1024 * 20;

end;

if Form1.RadioButton9.Checked = true then

begin

Raswifrovanie_RSA (Kb, P, Q, 'RSA_crypted \ Z_50_RSA.txt', 'RSA_uncrypted \ R_50_RSA.txt');

razmer: = 1024 * 20;

end;

if Form1.RadioButton8.Checked = true then

begin

Raswifrovanie_RSA (Kb, P, Q, 'RSA_crypted \ Z_100_RSA.txt', 'RSA_uncrypted \ R_100_RSA.txt');

razmer: = 1024 * 20;

end;

if Form1.RadioButton7.Checked = true then

begin

Raswifrovanie_RSA (Kb, P, Q, 'RSA_crypted \ Z_500_RSA.txt', 'RSA_uncrypted \ R_500_RSA.txt');

razmer: = 1024 * 20;

end;

if Form1.RadioButton6.Checked = true then

begin

Raswifrovanie_RSA (Kb, P, Q, 'RSA_crypted \ Z_1_RSA.txt', 'RSA_uncrypted \ R_1_RSA.txt');

razmer: = 1024 * 20;

end;

t2: = Time;

end;


vremja: = round ((t2 - t1) * 24 * 60 * 60) +1;

Label33.Caption: = IntToStr (vremja-1) + 'мілісек';


Label34.Caption: = FloatToStr ((razmer / vremja) -1) + 'байт / сек';

end;


end.






Підключаються модулі



unit DES_ECB_CBC_unit;



interface



procedure Wifrovanie_ECB (nazv_ish_f: string; nazv_vih_f: string);

procedure Raswifrovanie_ECB (nazv_ish_f: string; nazv_vih_f: string);

procedure Wifrovanie_CBC (nazv_ish_f: string; nazv_vih_f: string; vektor: string);

procedure Raswifrovanie_CBC (nazv_ish_f: string; nazv_vih_f: string; vektor: string);



implementation

uses DES_unit;





procedure Wifrovanie_ECB (nazv_ish_f: string; nazv_vih_f: string);

var

i: integer;

ish_text, vihod_text: string;

bykva: byte;

ish_f, vihod_f: file of byte;

begin



assignfile (ish_f, nazv_ish_f);

reset (ish_f);



assignfile (vihod_f, nazv_vih_f);

rewrite (vihod_f);

while not EOF (ish_f) do

begin

read (ish_f, bykva);

ish_text: = ish_text + chr (bykva);

if Length (ish_text) = 8 then

begin

vihod_text: = Kodirovat (ish_text);

for i: = 1 to 8 do

begin

bykva: = byte (vihod_text [i]);

write (vihod_f, bykva);

end;

ish_text: ='';

end;

end;



if (Length (ish_text) <> 0) then

begin

while length (ish_text) <8 do

ish_text: = ish_text + 0 ";

vihod_text: = Kodirovat (ish_text);

for i: = 1 to 8 do

begin

bykva: = byte (vihod_text [i]);

write (vihod_f, bykva);

end;

end;



end;

procedure Raswifrovanie_ECB (nazv_ish_f: string; nazv_vih_f: string);

var

i: integer;

ish_text, vihod_text: string;

bykva: byte;

ish_f, vihod_f: file of byte;

begin



assignfile (ish_f, nazv_ish_f);

reset (ish_f);



assignfile (vihod_f, nazv_vih_f);

rewrite (vihod_f);



while not EOF (ish_f) do

begin

read (ish_f, bykva);

ish_text: = ish_text + chr (bykva);

if Length (ish_text) = 8 then

begin

vihod_text: = Raskodirovat (ish_text);

for i: = 1 to 8 do

begin

bykva: = byte (vihod_text [i]);

write (vihod_f, bykva);

end;

ish_text: ='';

end;

end;

if (Length (ish_text) <> 0) then

begin

while length (ish_text) <8 do

ish_text: = ish_text + 0 ";

vihod_text: = Raskodirovat (ish_text);

for i: = 1 to 8 do

begin

bykva: = byte (vihod_text [i]);

write (vihod_f, bykva);

end;

end;



end;



procedure Wifrovanie_CBC (nazv_ish_f: string; nazv_vih_f: string; vektor: string);

var

i: integer;

ish_text, vihod_text: string;

bykva: byte;

ish_f, vihod_f: file of byte;

begin



assignfile (ish_f, nazv_ish_f);

reset (ish_f);



assignfile (vihod_f, nazv_vih_f);

rewrite (vihod_f);



while not EOF (ish_f) do

begin

read (ish_f, bykva);

ish_text: = ish_text + chr (bykva);

if Length (ish_text) = 8 then

begin

for i: = 1 to 8 do

ish_text [i]: = chr (ord (ish_text [i]) xor ord (vektor [i]));

vihod_text: = Kodirovat (ish_text);

vektor: = vihod_text;

for i: = 1 to 8 do

begin

bykva: = byte (vihod_text [i]);

write (vihod_f, bykva);

end;

ish_text: ='';

end;

end;



if (Length (ish_text) <> 0) then

begin

while length (ish_text) <8 do

ish_text: = ish_text + 0 ";

for i: = 1 to 8 do

ish_text [i]: = chr (ord (ish_text [i]) xor ord (vektor [i]));

vihod_text: = Kodirovat (ish_text);

for i: = 1 to 8 do

begin

bykva: = byte (vihod_text [i]);

write (vihod_f, bykva);

end;

end;



end;



procedure Raswifrovanie_CBC (nazv_ish_f: string; nazv_vih_f: string; vektor: string);

var

i: integer;

ish_text, vihod_text, tmp: string;

bykva: byte;

ish_f, vihod_f: file of byte;

begin



assignfile (ish_f, nazv_ish_f);

reset (ish_f);



assignfile (vihod_f, nazv_vih_f);

rewrite (vihod_f);



while not EOF (ish_f) do

begin

read (ish_f, bykva);

ish_text: = ish_text + chr (bykva);

if Length (ish_text) = 8 then

begin

tmp: = ish_text;

vihod_text: = Raskodirovat (ish_text);

for i: = 1 to 8 do

vihod_text [i]: = chr (ord (vihod_text [i]) xor ord (vektor [i]));

vektor: = tmp;

for i: = 1 to 8 do

begin

bykva: = byte (vihod_text [i]);

write (vihod_f, bykva);

end;

ish_text: ='';

end;

end;



if (Length (ish_text) <> 0) then

begin

while length (ish_text) <8 do

ish_text: = ish_text + 0 ";

tmp: = ish_text;

vihod_text: = Raskodirovat (ish_text);

for i: = 1 to 8 do

vihod_text [i]: = chr (ord (vihod_text [i]) xor ord (vektor [i]));

vektor: = tmp;

for i: = 1 to 8 do

begin

bykva: = byte (vihod_text [i]);

write (vihod_f, bykva);

end;

end;



end;



end.





unit DES_unit;



interface



type odnom_1_64 = array [1 .. 64] of byte;

type odnom_1_56 = array [1 .. 56] of byte;

type odnom_1_48 = array [1 .. 48] of byte;

type odnom_1_32 = array [1 .. 32] of byte;

type dvym_1_17_1_32 = array [1 .. 17,1 .. 32] of byte;

type dvym_1_17_1_28 = array [1 .. 17,1 .. 28] of byte;

type dvym_1_16_1_48 = array [1 .. 16,1 .. 48] of byte; / / 16 підключений



procedure Perestanovka_IP (var Klju4_64_posle_IP: odnom_1_64);

procedure Perestanovka_E (n: integer; Tekst_32_do_E: dvym_1_17_1_32; var Tekst_48_posle_E: odnom_1_48);

procedure Perestanovka_P (var Tekst_32_posle_P: odnom_1_32);

procedure S_Blok (e: odnom_1_48; var p: odnom_1_32);

procedure Perestanovka_IP_1 (var Tekst_64_posle_IP1: odnom_1_64);



procedure TextVBinarn (Tekst_bykv: string; var Tekst_64_binar: odnom_1_64);

procedure BinarnVText (Tekst_64_binar: odnom_1_64; var Tekst_bykv: string);

function Kodirovat (Ish_tekst_bykv: string): string;

function Raskodirovat (Wifr_tekst_bykv: string): string;



implementation



uses podkluchi_unit;



var

matrica_IP: array [1 .. 64] of byte = (58, 50, 42, 34, 26, 18, ​​10, 02,

60, 52, 44, 36, 28, 20, 12, 04,

62, 54, 46, 38, 30, 22, 14, 06,

64, 56, 48, 40, 32, 24, 16, 08,

57, 49, 41, 33, 25, 17, 09, 01,

59, 51, 43, 35, 27, 19, 11, 03,

61, 53, 45, 37, 29, 21, 13, 05,

63, 55, 47, 39, 31, 23, 15, 07);

matrica_E: array [1 .. 48] of byte = (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);

matrica_P: array [1 .. 32] of byte = (16, 07, 20, 21,

29, 12, 28, 17,

01, 15, 23, 26,

05, 18, ​​31, 10,

02, 08, 24, 14,

32, 27, 03, 09,

19, 13, 30, 06,

22, 11, 04, 25);

matrica_IP_1: array [1 .. 64] of byte = (40, 08, 48, 16, 56, 24, 64, 32,

39, 07, 47, 15, 55, 23, 63, 31,

38, 06, 46, 14, 54, 22, 62, 30,

37, 05, 45, 13, 53, 21, 61, 29,

36, 04, 44, 12, 52, 20, 60, 28,

35, 03, 43, 11, 51, 19, 59, 27,

34, 02, 42, 10, 50, 18, ​​58, 26,

33, 01, 41, 09, 49, 17, 57, 25);

procedure Perestanovka_IP (var Klju4_64_posle_IP: odnom_1_64);

var Vrem_klju4_64: odnom_1_64;

i: integer;

begin

/ / Kopirivanie binarnogo predstavlenia

for i: = 1 to 64 do

Vrem_klju4_64 [i]: = Klju4_64_posle_IP [i];



/ / IP perestanovka

for i: = 1 to 64 do

Klju4_64_posle_IP [i]: = Vrem_klju4_64 [matrica_IP [i]];



end;



procedure Perestanovka_E (n: integer; Tekst_32_do_E: dvym_1_17_1_32; var Tekst_48_posle_E: odnom_1_48);

var i: integer;

begin



for i: = 1 to 48 do

Tekst_48_posle_E [i]: = Tekst_32_do_E [n, matrica_E [i]];

end;

procedure Perestanovka_P (var Tekst_32_posle_P: odnom_1_32);

var i: integer;

Vrem_tekst_32: odnom_1_32;

begin



/ / Kopiy binarnogo predstavlenia

for i: = 1 to 32 do

Vrem_tekst_32 [i]: = Tekst_32_posle_P [i];



/ / P perestanovka bit

for i: = 1 to 32 do

Tekst_32_posle_P [i]: = Vrem_tekst_32 [matrica_P [i]];



end;



procedure S_Blok (e: odnom_1_48; var p: odnom_1_32);

var q, i, j: integer; / / s4et4iki

k: integer; / / 4islo na perese4enii neobhodimoi stro4ki i stolbika

h: integer;

symma_2_krainih, symma_4_vnytrennih: integer;

s_blok: array [0 .. 3,0 .. 15] of byte;

B_dvym_8_6: array [1 .. 8,1 .. 6] of byte;

f: textfile;

begin



/ / Razbitie na 8 4astei po 6 bit

q: = 0;

for i: = 1 to 8 do

for j: = 1 to 6 do

begin

q: = q +1;

B_dvym_8_6 [i, j]: = e [q];

end;



/ / S4itivaem S blok

AssignFile (f, 'S.txt');

Reset (f);



//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

for q: = 1 to 8 do

begin

symma_2_krainih: = B_dvym_8_6 [q, 6] + B_dvym_8_6 [q, 1] * 2;

symma_4_vnytrennih: = B_dvym_8_6 [q, 2] +2 * B_dvym_8_6 [q, 3] +4 * B_dvym_8_6 [q, 4] +8 * B_dvym_8_6 [q, 5];

for i: = 0 to 3 do

for j: = 0 to 15 do

read (f, s_blok [i, j]);

k: = s_blok [symma_2_krainih, symma_4_vnytrennih];

h: = 4 * q;

for j: = 1 to 4 do

begin

p [h]: = k mod 2;

k: = k div 2;

h: = h-1;

end

end;



closefile (f);



end;



procedure Perestanovka_IP_1 (var Tekst_64_posle_IP1: odnom_1_64);

var Vrem_tekst_64: odnom_1_64;

i: integer;

begin

/ / Kopiy binarnogo predstavlenia

for i: = 1 to 64 do

Vrem_tekst_64 [i]: = Tekst_64_posle_IP1 [i];



/ / IP perestanovka bit

for i: = 1 to 64 do

Tekst_64_posle_IP1 [i]: = Vrem_tekst_64 [matrica_IP_1 [i]];



end;



/ / Perevodit text v binarnoe predstavlenie

procedure TextVBinarn (Tekst_bykv: string; var Tekst_64_binar: odnom_1_64);

var j, h, a, i: integer;

alfav_ASCII: array [1 .. 8] of integer;

begin

/ / Perevod simvolov v ASCII-kodi

for i: = 1 to 8 do

alfav_ASCII [i]: = ord (Tekst_bykv [i ]);// vozvrawaet № simvola v ASC



/ / Perevod chisel v binarniy kod

for j: = 1 to 8 do

begin

h: = 8 * j;

a: = alfav_AscII [j];

for i: = 1 to 8 do

begin

Tekst_64_binar [h]: = a mod 2;

a: = a div 2; / / sdvig vpravo na 1

h: = h-1;

end

end;



end;



//++++++++++++++++++++++++++++++++++++++++++++++++ +++++++

/ / Perevodit binarnoe predstavlenie v tekst

procedure BinarnVText (Tekst_64_binar: odnom_1_64; var Tekst_bykv: string);

var Vrem_tekst: string;

a, i, j: integer;

begin



Vrem_tekst :='';

for i: = 1 to 8 do

begin

a: = 0;

for j: = (i-1) * 8 +1 to i * 8 do

a: = a * 2 + Tekst_64_binar [j];

Vrem_tekst: = concat (Vrem_tekst, char (a ));// prilirljaet ksa

end;

Tekst_bykv: = Vrem_tekst;

end;

function Kodirovat (Ish_tekst_bykv: string): string;

var Ish_tekst_64_binar: odnom_1_64;

i, j: integer;

levaja, pravaja: dvym_1_17_1_32;

Tekst_48_posle_raswirenija: odnom_1_48;

B_tekst_32: odnom_1_32;

begin



TextVBinarn (Ish_tekst_bykv, Ish_tekst_64_binar);



Perestanovka_IP (Ish_tekst_64_binar);



/ / Delim na levyju i na pravyju 4asti

j: = 0;

for i: = 1 to 64 do

if i <33 then

levaja [1, i]: = Ish_tekst_64_binar [i]

else

begin

j: = j +1;

pravaja [1, j]: = Ish_tekst_64_binar [i];

end;



/ / 16 rayndov wifrovanija

for i: = 2 to 17 do

begin

for j: = 1 to 32 do

levaja [i, j]: = pravaja [i-1, j];

Perestanovka_E (i-1, pravaja, Tekst_48_posle_raswirenija);

for j: = 1 to 48 do

Tekst_48_posle_raswirenija [j]: = Tekst_48_posle_raswirenija [j] xor podklu4i [i-1, j];

s_blok (Tekst_48_posle_raswirenija, B_tekst_32);

Perestanovka_P (B_tekst_32);

for j: = 1 to 32 do

pravaja [i, j]: = levaja [i-1, j] xor B_tekst_32 [j];

end;



//!!!

/ / Menjaem mestami

for i: = 1 to 32 do

begin

j: = pravaja [17] [i];

pravaja [17] [i]: = levaja [17] [i];

levaja [17] [i]: = j;

end;



/ / Skladivanie levoi i pravoi

j: = 0;

for i: = 1 to 64 do

if i <33 then

Ish_tekst_64_binar [i]: = levaja [17, i]

else

begin

j: = j +1;

Ish_tekst_64_binar [i]: = pravaja [17, j];

end;



Perestanovka_IP_1 (Ish_tekst_64_binar);



BinarnVText (Ish_tekst_64_binar, Ish_tekst_bykv);



kodirovat: = Ish_tekst_bykv;

end;

function Raskodirovat (Wifr_tekst_bykv: string): string;

var Wifr_tekst_64_binar: odnom_1_64;

i, j: integer;

levaja, pravaja: dvym_1_17_1_32;

Tekst_48_posle_raswirenija: odnom_1_48;

B_tekst_32: odnom_1_32;

begin



TextVBinarn (Wifr_tekst_bykv, Wifr_tekst_64_binar);



Perestanovka_IP (Wifr_tekst_64_binar);



/ / Delim na levyju i na pravyju 4asti

j: = 0;

for i: = 1 to 64 do

if i <33 then

levaja [17, i]: = Wifr_tekst_64_binar [i]

else

begin

j: = j +1;

pravaja [17, j]: = Wifr_tekst_64_binar [i];

end;



//!!!!!!!!

/ / Menjaem mestami

for i: = 1 to 32 do

begin

j: = pravaja [17] [i];

pravaja [17] [i]: = levaja [17] [i];

levaja [17] [i]: = j;

end;

/ / 16 raundov wifrovanija

for i: = 17 downto 2 do

begin

for j: = 1 to 32 do

pravaja [i-1, j]: = levaja [i, j];

Perestanovka_E (i, levaja, Tekst_48_posle_raswirenija);

for j: = 1 to 48 do

Tekst_48_posle_raswirenija [j]: = Tekst_48_posle_raswirenija [j] xor podklu4i [i-1, j];

s_blok (Tekst_48_posle_raswirenija, B_tekst_32);

Perestanovka_P (B_tekst_32);

for j: = 1 to 32 do

levaja [i-1, j]: = pravaja [i, j] xor B_tekst_32 [j];

end;



/ / Skladivanie levoi i pravoi

j: = 0;

for i: = 1 to 64 do

if i <33 then

Wifr_tekst_64_binar [i]: = levaja [1, i]

else

begin

j: = j +1;

Wifr_tekst_64_binar [i]: = pravaja [1, j];

end;



Perestanovka_IP_1 (Wifr_tekst_64_binar);



BinarnVText (Wifr_tekst_64_binar, Wifr_tekst_bykv);

Raskodirovat: = Wifr_tekst_bykv;

end;





end.



unit Podkluchi_unit;



interface

uses DES_unit;



var

podklu4i: dvym_1_16_1_48;

matrica_PC1: array [1 .. 56] of byte = (57, 49, 41, 33, 25, 17, 09,

01, 58, 50, 42, 34, 26, 18,

10, 02, 59, 51, 43, 35, 27,

19, 11, 03, 60, 52, 44, 36,

63, 55, 47, 39, 31, 23, 15,

07, 62, 54, 46, 38, 30, 22,

14, 06, 61, 53, 45, 37, 29,

21, 13, 05, 28, 20, 12, 04);

matrica_PC2: array [1 .. 48] of byte = (14, 17, 11, 24, 01, 05,

03, 28, 15, 06, 21, 10,

23, 19, 12, 04, 26, 08,

16, 07, 27, 20, 13, 02,

41, 52, 31, 37, 47, 55,

30, 40, 51, 45, 33, 48,

44, 49, 39, 56, 34, 53,

46, 42, 50, 36, 29, 32);

matrica_sdvigov: array [1 .. 16] of byte = (1,1,2,2,

2,2,2,2,

1,2,2,2,

2,2,2,1);



procedure Formirovanie_16_podklju4ei (Klju4_64: string);





implementation

//++++++++++++++++++++++++++++++++++++++++++++++++ +++++++

procedure Perestanovka_PC1 (Klju4_64_do_PC1: odnom_1_64; var Klju4_64_posle_PC1: odnom_1_56);

var i: integer;

begin

for i: = 1 to 56 do

Klju4_64_posle_PC1 [i]: = Klju4_64_do_PC1 [matrica_PC1 [i]];

end;



//++++++++++++++++++++++++++++++++++++++++++++++++ +++++++

procedure Perestanovka_PC2 (Klju4_56_do_PC2: odnom_1_56; k: integer);

var i: integer;

begin

for i: = 1 to 48 do

podklu4i [k] [i]: = Klju4_56_do_PC2 [matrica_PC2 [i]];

end;



//++++++++++++++++++++++++++++++++++++++++++++++++ +++++++

procedure Formirovanie_16_podklju4ei (Klju4_64: string);

var

i, j, k: integer;

c_vrem, d_vrem: dvym_1_17_1_28;

c: dvym_1_17_1_28;

d: dvym_1_17_1_28;

c_d: odnom_1_56;

Klju4ik_64: odnom_1_64;

Klju4ik_56: odnom_1_56;

begin



TextVBinarn (Klju4_64, Klju4ik_64); / / ключ з 64 в 64



Perestanovka_PC1 (Klju4ik_64, Klju4ik_56); / / бітовий ключ 64, бітовий ключ 56



/ / Razbivaem na cid

j: = 0;

for i: = 1 to 56 do

if i <29 then

c [1, i]: = Klju4ik_56 [i]

else

begin

j: = j +1;

d [1, j]: = Klju4ik_56 [i];

end;



/ / Kopiryem з id vo vremennie c_vrem i d_vrem

for j: = 1 to 28 do

begin

c_vrem [1, j]: = c [1, j];

d_vrem [1, j]: = d [1, j];

end;



//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!

/ / Delaem sdvigi LSi

for i: = 2 to 17 do

begin

k: = 0;

for j: = 1 to 28 do

if j + matrica_sdvigov [i-1]> 28 then

begin

k: = k +1;

c [i, j]: = c_vrem [i-1, k];

d [i, j]: = d_vrem [i-1, k];

c_vrem [i, j]: = c [i, j];

d_vrem [i, j]: = d [i, j];

end

else

begin

c [i, j]: = c_vrem [i-1, j + matrica_sdvigov [i-1]];

d [i, j]: = d_vrem [i-1, j + matrica_sdvigov [i-1]];

c_vrem [i, j]: = c [i, j];

d_vrem [i, j]: = d [i, j];

end;

end;



/ / Sobiraem з id vmeste

for i: = 2 to 17 do

begin

k: = 0;

for j: = 1 to 28 do

begin

k: = k +1;

c_d [k]: = c [i, j];

end;

for j: = 1 to 28 do

begin

k: = k +1;

c_d [k]: = d [i, j];

end;

Perestanovka_PC2 (c_d, i-1);

end;



end;







end.



unit RSA_unit;



interface



function NOD (a {3}: int64; b {fi}: int64; var x: int64; var y: int64): int64;

function Nomer_v_alfavite (a: char): byte;

function Vozvedenie_po_modylju (osnovanie: int64; stepen: int64; modyl: int64): int64;

procedure Wifrovanie_RSA (Ka: int64; P: int64; Q: int64; nazv_ish_f: string; nazv_vih_f: string; var Kb: int64);

procedure RasWifrovanie_RSA (Kb: int64; P: int64; Q: int64; nazv_ish_f: string; nazv_vih_f: string);



var

alf: string;





implementation



function Vozvedenie_v_stepen (osnovanie: int64; stepen: int64): int64;

var

rez: longint;

i: longint;

begin

rez: = 1;



for i: = 1 to stepen do

rez: = rez * osnovanie;



Vozvedenie_v_stepen: = rez;

end;



function Vozvedenie_po_modylju (osnovanie: int64; stepen: int64; modyl: int64): int64;

var

rez: int64;

i: longint;

t: int64; / / osnovanie vo vremennoi stepeni

begin

rez: = 1;

t: = osnovanie;



while (stepen <> 0) do

begin

if (stepen mod 2 = 1) then

rez: = (rez * t) mod modyl;

t: = (t * t) mod modyl;

stepen: = stepen div 2;

end;



Vozvedenie_po_modylju: = rez;

end;



/ / Vozvrawaet nomer bykvi v alfavite

function Nomer_v_alfavite (a: char): byte;

var

i: byte;

begin

i: = 0;



while ((i <= Length (alf)) and (alf [i +1] <> a)) do

i: = i +1;



Nomer_v_alfavite: = i;

end;



/ / Naibolwii obwii delitel

function NOD (a {3}: int64; b {fi}: int64; var x: int64; var y: int64): int64;

var

x1, y1: longint;

x2, y2: longint;

q: longint;

r: longint;

begin

if (b = 0) then

begin

NOD: = a;

x: = 1;

y: = 0;

end

else

begin

x2: = 1;

x1: = 0;

y2: = 0;

y1: = 1;

while (b> 0) do

begin

q: = a div b;

r: = aq * b;

x: = x2-q * x1;

y: = y2-q * y1;

a: = b;

b: = r;

x2: = x1;

x1: = x;

y2: = y1;

y1: = y;

end;

NOD: = a;

x: = x2;

y: = y2;

end;



end;



/ / RSA wifrovanie failov

procedure Wifrovanie_RSA (Ka: int64; P: int64; Q: int64; nazv_ish_f: string; nazv_vih_f: string; var Kb: int64);

var

N: int64;

M, C: int64;

f: int64; / / 4islo vzaimnoprostih 4isel s N

i: integer;



ish_text, vihod_text: string;

bykva: char;

ish_f, vihod_f: TextFile;



begin



N: = Q * P; / / Nahodim N

f: = (P-1) * (Q-1); / / Nahodin 4islo vzaimnoprostih 4isel s N

NOD (Ka, f, Kb, M); / / Nahodim Kb



while (Kb <0) do

Kb: = Kb + f; / / Esli Kb otricatelno to yveli4ivaem ego



assignfile (ish_f, nazv_ish_f);

reset (ish_f);



assignfile (vihod_f, nazv_vih_f);

rewrite (vihod_f);



while not EOF (ish_f) do

begin

read (ish_f, bykva);

C: = Nomer_v_alfavite (bykva);

C: = Vozvedenie_po_modylju (C, Ka, N);

writeln (vihod_f, C);

end;

closefile (ish_f);

closefile (vihod_f);

end;



/ / RSA raswifrovanie failov

procedure RasWifrovanie_RSA (Kb: int64; P: int64; Q: int64; nazv_ish_f: string; nazv_vih_f: string);

var

N: int64;

M, C: int64;

f: int64; / / 4islo vzaimnoprostih 4isel s N

i: integer;

ish_text, vihod_text: string;

bykva: char;

ish_f, vihod_f: TextFile;

begin



N: = Q * P; / / Nahodim N

f: = (P-1) * (Q-1); / / Nahodin 4islo vzaimnoprostih 4isel s N



assignfile (ish_f, nazv_ish_f);

reset (ish_f);



assignfile (vihod_f, nazv_vih_f);

rewrite (vihod_f);



while not EOF (ish_f) do

begin

readln (ish_f, C);

C: = Vozvedenie_po_modylju (C, Kb, N);

bykva: = alf [C +1];

write (vihod_f, bykva);

end;

closefile (ish_f);

closefile (vihod_f);

end;



end.



Зашифрований і разшіфрованний текст записується в директорію з вихідним файлом.

Скріншоти роботи програми





Висновки


В результаті виконання даної роботи були отримані практичні навички використання сучасних як симетричних (DES), так і асиметричних (RSA) алгоритмів шифрування.





23

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
362.8кб. | скачати


Схожі роботи:
Шифрування і дешифрування даних за допомогою симетричних криптографічних алгоритмів
RSA алгоритмів кодування з відкритим ключем
Захист персональних даних за допомогою алгоритмів шифрування
Використання генетичних алгоритмів в САПР ТП
Використання ідей Вальдорфської педагогіки у сучасних школах
Використання сучасних інформаційних технологій на уроках літератури
Розрахунок симетричних автоколивань нелінійної САР
Особливості використання сучасних засобів навчання іноземної мови
Аналіз прибутку та його використання в сучасних умовах господарювання
© Усі права захищені
написати до нас