Симметричные криптосистемы как способ шифрования, в котором для шифрования и расшифровывания применяется один и тот же криптографический ключ. Разбор и реализация шифрования алгоритма: простая и двойная перестановка, перестановка магический квадрат.
Шифрование - это обратимое преобразование данных с целью их сокрытия от посторонних. Для достижения этой цели были поставлены следующие задачи: - изучение темы симметричного шифрования; - разбор и реализация шифрования алгоритма: а) простая перестановка; б) одиночная перестановка по ключу; в) двойная перестановка; г) перестановка «магический квадрат». 1. Рисунок 1 - Общая схема симметричного шифрования Классическим примером таких алгоритмов являются симметричные криптографические алгоритмы, перечисленные ниже: · Простая перестановка · Одиночная перестановка по ключу · Двойная перестановка · Перестановка «Магический квадрат» [5] 1.2 Простая перестановка Известно, что в V веке до нашей эры правители Спарты, наиболее воинственного из греческих государств, имели хорошо отработанную систему секретной военной связи и шифровали свои послания с помощью скитала, первого простейшего криптографического устройства, реализующего метод простой перестановки. Практическая часть 2.1 Процедура «Простая перестановка» Алгоритм (ПРИЛОЖЕНИЕ 1) Исходники // = = = = = = = = = = = = = = = = // procedure Prostaya_perestanovka; Var Text_1, Text_2: string[80]; Encryption_1, Encryption_2: string[80]; TextMatr: Array [1..10, 1..10] of char; EncryptionMatr: Array [1..10, 1..10] of char; i, j, k, kolsimvolov, n, m: integer; flag1: Boolean; begin // Repeat Write ( Ввод количества столбцов: ); Readln(m); flag1:=True; If (mkolsimvolov) then Begin TextMatr [i, j]:= ; End; k:=k 1; End; End; // Writeln ( Вывод таблицы после перестановки:); For i:=1 to n do Begin For j:=1 to m do Begin Write ( , TextMatr [i, j]); End; Writeln(); End; // For i:=1 to m do For j:=1 to n do Text_2:=Text_2 TextMatr [j, i]; Writeln ( Вывод шифртекста: , Text_2); // Расшифрование Writeln ( - Расшифрование-); Encryption_2:= Text_2; k:=1; For i:=1 to m do Begin For j:=1 to n do Begin EncryptionMatr [j, i]:= Encryption_2 [k]; k:=k 1; End; End; // Writeln ( Вывод таблицы после перестановки:); For i:=1 to n do Begin For j:=1 to m do Begin Write ( , EncryptionMatr [i, j]); End; Writeln(); End; // For i:=1 to n do For j:=1 to m do Encryption_1:=Encryption_1 EncryptionMatr [i, j]; Writeln ( Вывод открытого текста: , Encryption_1); end; // = = = = = = = = = = = = = = = = // Тестовые примеры Простая перестановка - 1 Одиночная перестановка по ключу - 2 Двойная перестановка - 3 Перестановка «Магический квадрат» - 4 Выход - 0 Выбор алгоритма: 1 Ввод количества столбцов: 7 Ввод открытого текста: ТЕРМИНАТОРПРИБЫВАЕТСЕДЬМОГОВПОЛНОЧЬ - Шифрование- Вывод таблицы после перестановки: Т Е Р М И Н А Т О Р П Р И Б Ы В А Е Т С Е Д Ь М О Г О В П О Л Н О Ч Ь Вывод шифртекста: ТТЫДПЕОВЬОРРАМЛМПЕОНИРТГОНИСОЧАБЕВЬ - Расшифрование- Вывод таблицы после перестановки: Т Е Р М И Н А Т О Р П Р И Б Ы В А Е Т С Е Д Ь М О Г О В П О Л Н О Ч Ь Вывод открытого текста: ТЕРМИНАТОРПРИБЫВАЕТСЕДЬМОГОВПОЛНОЧЬ 2.2 Процедура «Одиночная перестановка по ключу» Алгоритм (ПРИЛОЖЕНИЕ 2) Исходники // = = = = = = = = = = = = = = = = // procedure Odinochnaya_perestanovka_po_klyuchu; Var Text_1, Text_2: string[80]; Encryption_1, Encryption_2: string[80]; TextMatr: Array [1..10, 1..10] of char; EncryptionMatr: Array [1..10, 1..10] of char; i, j, k, l, kolsimvolov, n, m: integer; flag1: Boolean; key1, key2: string[10]; c: char; begin // Repeat Write ( Ввод ключа: ); Readln(key1); m:=Length(key1); flag1:=true; for i:=1 to m-1 do for j:=i 1 to m do if (key1 [i]=key1 [j]) then flag1:=false; If Not(flag1) then Writeln (Все символы должны быть различными!); Until flag1; key2:= key1; // Repeat Write ( Ввод открытого текста: ); Readln (Text_1); kolsimvolov:=Length (Text_1); flag1:=True; If (kolsimvolovkolsimvolov) then Begin TextMatr [i, j]:= ; End; k:=k 1; End; End; // Writeln ( Вывод таблицы до перестановки:); For j:=1 to m do Write ( , key2 [j]); Writeln(); For i:=1 to n do Begin For j:=1 to m do Begin Write ( , TextMatr [i, j]); End; Writeln(); End; // Перестановка Writeln ( Перестановка); for i:=1 to m-1 do for j:=i 1 to m do if (key2 [i]>key2 [j]) then Begin c:=key2 [i]; key2 [i]:=key2 [j]; key2 [j]:=c; for k:=1 to n do begin c:=TextMatr [k, i]; TextMatr [k, i]:=TextMatr [k, j]; TextMatr [k, j]:=c; end; end; // Writeln ( Вывод таблицы после перестановки:); For j:=1 to m do Write ( , key2 [j]); Writeln(); For i:=1 to n do Begin For j:=1 to m do Begin Write ( , TextMatr [i, j]); End; Writeln(); End; // For i:=1 to m do For j:=1 to n do Text_2:=Text_2 TextMatr [j, i]; Writeln ( Вывод шифртекста: , Text_2); // = = = = = = = = = = = = = = = = // // Расшифрование Writeln ( - Расшифрование-); Encryption_2:= Text_2; key2:=key1; // Перестановка Writeln ( Перестановка); for i:=1 to m-1 do for j:=i 1 to m do if (key2 [i]>key2 [j]) then Begin c:=key2 [i]; key2 [i]:=key2 [j]; key2 [j]:=c; end; k:=1; For i:=1 to m do Begin l:= pos (key2 [i], key1); For j:=1 to n do Begin EncryptionMatr [j, l]:= Encryption_2 [k]; k:=k 1; End; End; // Writeln ( Вывод таблицы после перестановки:); For j:=1 to m do Write ( , key1 [j]); Writeln(); For i:=1 to n do
Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность своей работы