Использование современных симметрических (DES) и асимметрических (RSA) алгоритмов шифрования

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

Для того чтобы скачать эту работу.
1. Подтвердите что Вы не робот:
2. И нажмите на эту кнопку.
закрыть



трольных битов и перестановки остальных используется функция 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 For