Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБОР. РАб. 11_12.doc
Скачиваний:
1
Добавлен:
21.09.2019
Размер:
96.26 Кб
Скачать

Лабораторная работа № 11_12 Компьютерная криптография

1_1. Основные теоретические положения

1_1.1. Мононограммный шифр Полибия

Для получения такого шифра, как правило, используется ключевое слово, в котором любая буква алфавита используется не более одного раза. Ключевое слово вписывается построчно, начиная с первой строки. При наличии повторяющихся букв в ключевом слове они отбрасываются. Для русского алфавита такая таблица может иметь размерность 5х6. Далее таблица дополняется не вошедшими в ключевое слово буквами алфавита в алфавитном порядке. Для ключевого слова «ГАМБУРГЕР» шифровальная таблица будет иметь вид:

Г

А

М

Б

У

Р

Е

В

Д

Ж

З

И

К

Л

Н

О

П

С

Т

Ф

Х

Ц

Ч

Ш

Щ

Ь

Ы

Э

Ю

Я

Вторые буква «Г» и «Р» в ключевом слове «ГАМБУРГЕР» в таблицу не включены в соответствии с раннее упомянутым правилом. Шифруемый символ находят в таблице и вместо него, в шифровку ставится символ из таблицы находящийся прямо под найденным символом. Например, буква Т в сообщении заменяется буквой Щ в шифровке. Для приведенной выше таблицы Полибия сообщение «ВСТРЕЧАЙТЕ ВТОРОГО» дает шифровку:

В

С

Т

Р

Е

Ч

А

И

Т

Е

В

Т

О

Р

О

Г

О

Л

Ш

Щ

И

К

Ю

В

С

Щ

К

Л

Щ

Ц

И

Ц

Е

Ц

1_1.2. Программная реализация

На рис.1 представлено визуальное приложение задачи. Процесс шифрации осуществляется следующим образом: Введите ключевое слово и нажмите на кнопку «Ключ». Далее введите исходный текст (зашифрованный текс) и нажмите на кнопку «Шифрация» («Дешифрация»). Результат появится в окошке «Шифровка» («Расшифрованный текст»).

Ниже приводится описание отдельных процедур, осуществляющих реализацию различных функций данной задачи.

Процедура инициализации FormCreate. В рамках данной процедуры осуществляется задание рабочего алфавита ( ) шифрации и множество допущенных к вводу символов в однострочные редакторы Edit1 – Edit4 ( ).

procedure TMForm1_1.FormCreate(Sender: TObject); //Инициализация

var i: Integer;

begin

Mn_Kl:=[];

Alf:='АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ .,?';

for i := 1 to Length(Alf) do Mn_Alf:= Mn_Alf + [Alf[i]];

end;

Процедуры ограничения на множество допущенных к вводу символов KeyPress, для однострочных редакторов Edit1 – Edit4 ( ) .

procedure TMForm1_1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if (Key in Mn_Alf) then else Key:=#0;

end;

Процедура формирования алфавита по правилам монограммного шифра Полибия по ключевому слову. Формируем множество символов, входящих в состав ключевого слова и параллельно первую часть алфавита шифра Полибия (переменная Str1).

procedure TMForm1_1.N2Click(Sender: TObject); //Ключевое слово

var Str,Str1:String;i,j,k,n:integer; s:Char;

begin

Str:=Edit1.Text; Str1:='';

Mn_Kl:=[]; n:=0; k:=0;

for i := 1 to Length(Str) do

begin

if (Str[i] in Mn_Kl) then else

begin

Mn_Kl :=Mn_Kl+[Str[i]];

Str1:=Str1 + Str[i];

end;

end;

for i := 1 to Length(Alf) do

begin

if (Alf[i] in Mn_Kl) then else Str1:=Str1+ Alf[i];

end;

for i := 1 to 6 do

begin

for j := 1 to 6 do

begin

n:=n+1;

Ms1[i,j]:=Str1[n];

end;

end;

end;

В переменную Str1 дописываем недостающие символы алфавита. Сформированный алфавит записываем в двухмерный массив Ms1.

Процедура шифрации обеспечивает поиск очередного символа исходного текста в двухмерном массиве (Ms1) и его замену на шифруемый символ ( ).

procedure TMForm1_1.N3Click(Sender: TObject); //Шифрация

var i,j,n,f: integer;

begin

Edit3.Text :='';

for n := 1 to Length(Edit2.Text) do

begin

for i := 1 to 6 do

begin

for j := 1 to 6 do

begin

if Edit2.Text[n]<> Ms1[i,j] then else

begin

if (i=6) then f:=1

else f:=i+1;

Edit3.Text:=Edit3.Text+Ms1[f,j];

end;

end;

end;

end;

end;

Процедура дешифрации имеет лишь незначительные отличия от процедуры шифрации: на входе работает с редактором Edit3 (шифрация) – на выходе с редактором Edit4 (дешифрация) и, кроме того, сегмент перекодировки ( ), работает на дешифрацию:

if (i=1) then f:=6 else f:=i-1;

Edit4.Text:=Edit4.Text+Ms1[f,j];