Шифры сложной замены. Построение таблицы Вижинера для заданного алфавита A1 (цифры, спецсимвол (=) и строчные буквы латинского алфавита)

Страницы работы

Содержание работы

Министерство науки и образования Украины

Сумский государственный университет

Кафедра информатики

Лабораторная работа №2

по теме:

"Шифры сложной замены. Шифр Вижинера"

Выполнила                                                                студентка гр. Ин-51

                                                                                    Павленко Анна

Проверил                                                                    Дунь А.В.

                                            Сумы 2009

Постановка задачи

1.  Построить таблицу Вижинера для заданного алфавита A1 (таблица 1.1) согласно вашего варианта.

2.  Производить зашифрование данных  длиной не менеее 30 символов с ключом, длиной не менее 10 символов и заданным алфавитом A1 с помощью шифра Вижинера.

3.  Производить расшифрование данных зашифрованных с помощью шифра Вижинера.

в-та

А1

14

Цифры, спецсимвол (=) и строчные буквы латинского алфавита


Исходные данные

Цифры, спецсимвол (=) и строчные буквы латинского алфавита:

          a b c d e f g h i j k l m n o p q r s t u v w x y z = 0 1 2 3 4 5 6 7 8 9

Исходный текст:

if=you=really=want=to=hear=about=it=the=first=thing

Ключ:

in51


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

unit Unit1;

interface

uses

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

  Dialogs, StdCtrls;

type

  TForm1 = class(TForm)

    Button1: TButton;

    Edit1: TEdit;

    Label1: TLabel;

    Edit2: TEdit;

    Label2: TLabel;

    Button2: TButton;

    Button3: TButton;

    Edit3: TEdit;

    Label3: TLabel;

    Label4: TLabel;

    Edit4: TEdit;

    procedure Button1Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

const

  alf:array[0..43] of char=('0','1','2','3','4','5','6','7','8','9','=','А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я');

var

  Form1: TForm1;

  tabl:array[0..43,0..43] of char;  //таблица

  mask:array [0..100] of char ;// копии ключа

  klu4:string;// ключ

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var

   i,j:integer;

   t:integer; //переменная, на которую мы сдвигаеем алфавит  чтобы построить таблицу

begin

for i:=0 to 45 do

form2.stringGrid1.Cells[0,i+1]:=inttostr(i);   //цифры

for j:=0 to 45 do

form2.stringGrid1.Cells[j+1,0]:=alf[j];   //алфафит

//создание таблицы Вижинера

for i:=0 to 43 do

  begin

    t:=0;

    for j:=0 to 43 do

      begin

       if(j+i<44) then

        tabl[i][j]:=alf[j+i]

        else

          begin

            tabl[i][j]:=alf[t];

                  inc(t);

          end;

      end;

  end;

//------------------------------

for i:=0 to 43 do

    for j:=0 to 43 do

    form2.stringGrid1.Cells[j+1,i+1] := tabl[i][j];

form2.showmodal;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

Edit1.Text:='if=you=really=want=to=hear=about=it=the=first=thing';

Edit2.Text:='in51' ;

end;

procedure TForm1.Button2Click(Sender: TObject);

var

ot:string;//открытый текст

k:integer;

sht:string;//зашифрованный текст

i,j,n,m:integer;

begin

ot:=Edit1.Text;

klu4:=Edit2.Text;

{

проверка: если ключ меньше длинны открытого текста, то копируем его на всю

длиину текста

}

k:=1;

for i:=0 to Edit1.GetTextLen do

  begin

    if(k<=Edit2.GetTextLen) then

      begin

        mask[i]:=klu4[k];

        inc(k);

      end

    else

      begin

        k:=1;

        mask[i]:=klu4[k];

        inc(k);

      end;

  end;

//---------------------------

//шифруем

for i:=1 to Edit1.GetTextLen do

  begin

    for j:=0 to 43 do

      begin

       if(ot[i]=tabl[0][j]) then

               m:=j;

       if(mask[i-1]=tabl[j][0]) then

        n:=j;

      end;

    sht:=sht+tabl[m][n];

  end;

Edit3.Text:=sht;

//-----------------------

end;

procedure TForm1.Button3Click(Sender: TObject);

var

sht:string;

rt:string;//расшифрованный текст

i,j,n,m,k:integer;

begin

sht:=Edit3.Text;

//расшифровка

 for i:=0 to Edit3.GetTextLen-1 do

  begin

    for j:=0 to 43 do

        if(mask[i]=tabl[0][j]) then

                  n:=j;

    for j:=0 to 43 do

        if(sht[i+1]=tabl[n][j]) then

          m:=j;

    rt:=rt+tabl[0][m];

  end;

Edit4.Text:=rt;

//---------------

end;

end.

unit Unit2;

interface

uses

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

  Dialogs, Grids;

type

  TForm2 = class(TForm)

    StringGrid1: TStringGrid;

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form2: TForm2;

implementation

{$R *.dfm}

end.

 Результат работы программы


Вывод

       Выполнив эту лабораторную работу я научилась шифровать информацию с помощью шифра Вижинера.

Похожие материалы

Информация о работе

Предмет:
Криптография
Тип:
Отчеты по лабораторным работам
Размер файла:
59 Kb
Скачали:
0