Автор: Пользователь скрыл имя, 25 Апреля 2011 в 09:15, лабораторная работа
1. ШИФР ЦЕЗАРЯ
2. МОДИФИЦИРОВАННЫЙ ШИФР ЦЕЗАРЯ
3. ШИФР АТБАШ
ЛАБОРАТОРНАЯ
РАБОТА №1
ШИФРЫ
ПРОСТОЙ ЗАМЕНЫ
1.
ШИФР ЦЕЗАРЯ
В 1 в. н.э. Ю. Цезарь во время войны с галлами, переписываясь со своими друзьями в Риме, заменял в сообщении первую букву латинского алфавита (А) на четвертую (D), вторую (В) – на пятую (Е), наконец, последнюю – на третью:
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
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
Пример 1.1. Донесение Ю. Цезаря Сенату об одержанной им победе
над Понтийским царем выглядело так:
YHQL YLGL YLFL ("Veni, vidi, vici" – лат. "Пришел, увидел, победил").
Император Август (1 в. н. э.) в своей переписке заменял первую букву на вторую, вторую – на третью и т. д., наконец, последнюю – на первую:
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
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 A
Пример 1.2. Любимое изречение императора Августа выглядело так:
GFTUJOB MFOUF ("Festina lente" – лат. "Торопись медленно").
Таким образом, множество отображений шифра Цезаря – это циклическая подгруппа симметрической группы , состоящая из подстановок сдвига:
где . (Определение математическое, для многих не понятное.)
Система Цезаря – это моноалфавитная подстановка (т.к. каждой букве открытого текста ставится в соответствие одна буква шифртекста), преобразующая открытый текст в криптограмму . При использовании для шифрования подстановки символ открытого текста заменяется символом шифрованного текста.
Цезарь использовал подстановку . Величина сдвига может выступать в качестве ключа. Шифр Цезаря является очень неустойчивым к вскрытию: для расшифровки достаточно осуществить перебор всех ключей, число которых меньше (для латинского алфавита их будет 26).
Для
улучшения криптографической
2.
МОДИФИЦИРОВАННЫЙ ШИФР
ЦЕЗАРЯ
Аббат Тритемеус – автор
Затем выбирают какое-нибудь слово, называемое "ключом", и подписывают под сообщением с повторением.
Чтобы
получить шифрованный текст, складывают
номер очередной буквы с
Пример
1.3. Выбираем ключевое слово "Пособие".
Составляем сообщение "сессия начинается
в конце семестра"
с е с с и я н а ч и н а е т с я в к о н ц е с е м е с т р а
п
о с о б и е п о с о б и е п о с
о б и е п о с о б и е п о
Шифруем,
разбиваем текст на группы длины 6, и получаем
шифрованное сообщение:
в
ф д а и и у р з ь э в о ш в о
ф щ р ц э х б ч ы з ь ш б п
Чтобы
получить шифрованный текст, складывают
номер очередной буквы с
Если под ключом шифра понимать однобуквенное слово “В” (в русском варианте), то мы получим шифр Цезаря.
Пример
1.4. Для сообщения из примера 1.3, получим:
ф
и ф ф л в р г ь
л р г и х ф в в
н т р щ и ф и
п и ф х у г
3.
ШИФР АТБАШ
Шифр Атбаш. Коды появились в глубокой древности в виде криптограмм. Порой священные иудейские тексты шифровались методом замены. Вместо первой буквы алфавита писалась последняя буква, вместо второй - предпоследняя и т.д. Этот древний шифр назывался Атбаш.
Если попытаться изобразить механизм шифра Атбаш наглядно, то это может выглядеть следующим образом:
А | Б | В | Г | Д | … | Э | Ю | Я | _ |
Рис. 1
Так, например, для текста, состоящего только из букв кириллического алфавита и пробела, замена будет осуществляться по правилу: А-пробел, Б-Я, В-Ю и т.д. Абсолютно аналогично справедлива обратная замена. При программной реализации методов шифрования текста на языке Object Pascal целесообразно использовать таблицу ASCII и функции работы с ней (ord и chr). В данном случае ключ шифрования не задан явным образом, но подразумевается, что он равен 1.
Можно вполне модифицировать данный простейший шифр и добавить некоторые дополнительные параметры (изменить первичный ключ или способ его генерации).
Данный алгоритм шифрования текста легко запрограммировать, например, следующим образом.
Function Atbash(openchar:char):char;
Begin Atbash := 255 – ord(openchar); End; |
Как видно из фрагмента
программы функция Atbash переводит
символ открытого текста в шифр путем
зеркального отражения по таблице ASCII,
состоящей из 256 символов (0..255).
ЗАДАНИЕ
МЕТОДИЧЕСКИЕ
РЕКОМЕНДАЦИИ
Ниже приводится пример реализации шифра Цезаря в среде Delphi.
Общая схема шифра для латинского алфавита изображена на рис. 2.
А | B | C | D | E | F | G | H | I | … |
Рис. 2
То есть, отображение происходит по правилу: A-D, B-E, C-F, D-G и т.д.
Например, слово BAG будет зашифровано в EDJ. Очевидно, что для обратного преобразования необходимо «сдвинуть» символы в обратную сторону на количество, равное исходному ключу.
Шифрование можно выразить общей формулой:
, где
С – шифрованный символ,
О – открытый текст,
key – ключ (сдвига).
Обратное же преобразование будет выполняться по формуле:
, где
С – шифрованный символ,
О – открытый текст,
key
– ключ (сдвига).
Теперь
приступим непосредственно
к программированию
данных шифров.
Компонент | Свойство | Значение |
Form1 | Caption | Шифрование текста |
Label1 | Caption | Выберите шифр |
Label2 | Caption | Исходный текст |
Label3 | Caption | Результат |
ComboBox1 | Items | Атбаш
Шифр Цезаря |
ComboBox1 | ItemIndex | 0 |
RadioGroup1 | ItemIndex | 0 |
RadioGroup1 | Items | Шифровать
Расшифровать |
RadioGroup1 | Caption | Действие |
CheckBox1 | Name | Clr |
CheckBox1 | Caption | Всегда очищать результат |
BitBtn1 | Caption | Выполнить |
BitBtn2 | Caption | Очистить |
BitBtn3 | Caption | Очистить |
BitBtn4 | Caption | Поменять |
BitBtn5 | Caption | Выход |
BitBtn6 | Caption | Открыть исх. текст из файла |
BitBtn7 | Caption | Сохранить результат в файл |
SaveDialog1 | Filter | Текстовые файлы|*.txt |
OpenDialog1 | Filter | Текстовые файлы|*.txt |
ActionList1 | Name | Crypto |
Свойства Glyph(иконка, файл *.ico) компонента BitBtn заполните самостоятельно. Стандартные иконки для кнопок Delphi расположены в C:\Program files\Common files\Borland Shared\Images\Buttons. Также вы можете изменить свойство Font компонентов Label1 и Label2.
{Шифр
Атбаш. Симметричный}
function catbash(s:string):string;
var i:integer; c,d:char;rez:string;
begin
rez:='';
for i:=1 to length(s) do
begin
c:=s[i];
d:=chr(255-ord(c));
rez:=rez+d;
end;
catbash:=rez;
end;
{Шифр
Цезаря. Шифрование}
function cEcezar(s:string; key:byte):string;
var i:integer; c,d:char;rez:string;
begin
rez:='';
for i:=1 to length(s) do
begin
c:=s[i];
d:=chr((ord(c)+ key)mod 255);
rez:=rez+d;
end;
cEcezar:=rez;
end;
{Шифр
Цезаря. Расшифрование}
function cDcezar(s:string;key:byte):
var i:integer; c,d:char;rez:string;
begin
rez:='';
for i:=1 to length(s) do
begin
c:=s[i];
d:=chr((ord(c)- key)mod 255);
rez:=rez+d;
end;
cDcezar:=rez;
end;
Для переименования в соответствии с образцом измените свойство Name у каждого действия.
procedure TForm1.AtbashExecute(Sender: TObject);
var i:integer;
begin