скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

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

Таблица 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 1

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 4

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 5 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 8 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)=011011. Тогда 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

Страницы: 1, 2, 3, 4


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.