Автор: Пользователь скрыл имя, 16 Мая 2012 в 12:15, лабораторная работа
Система Цезаря – это моноалфавитная подстановка (т.к. каждой букве открытого текста ставится в соответствие одна буква шифртекста), преобразующая открытый текст в криптограмму . При использовании для шифрования подстановки символ открытого текста заменяется символом шифрованного текста.
     ЛАБОРАТОРНАЯ 
РАБОТА №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