Лабораторная работа № 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];