Министерство образования и науки Украины
Сумской государственный университет
Кафедра информатики
Лабораторная работа №1
"Шифры простой замены. Шифр Цезаря"
Вариант №3
Выполнила студентка
группы ИН-52 Мельник Е.А.
Проверил
преподаватель Дунь А.В.
Сумы 2009
Постановка задачи
1. Ознакомиться с алгоритмом работы шифра Цезаря
2. Выполнить программную реализацию шифрования и дешифрование данных с шифра Цезаря, согласно своему варианту, а также криптоанализ шифра Цезаря.
3. Протестировать работу программы.
4. Оформить отчёт.
Теоретический материал по теме практического задания
Шифр Це́заря — один из древнейших шифров. При шифровании каждый символ заменяется другим, отстоящим от него в алфавите на фиксированное число позиций. Шифр Цезаря можно классифицировать как шифр подстановки, при более узкой классификации — шифр простой замены.
Если сопоставить каждому символу алфавита его порядковый номер (нумеруя с 0), то шифрование и дешифрование можно выразить формулами:
где — символ открытого текста, — символ шифрованного текста, — мощность алфавита, а — ключ.
Можно заметить, что суперпозиция двух шифрований на ключах и — есть просто шифрование на ключе . Более общо, множество шифрующих преобразований шифра Цезаря образует группу .
Алгоритм криптоанализа:
1. Определить частоты символов алфавита. Занести их в массив FiL.(из Таблицы 1.2 или 1.3)
2. Определить частоты символов шифртекста. Занести их в массив FiМ.
o Вычислить сколько раз встречается тот или иной символ в шифртексте (занести в массив freq);
o Определить количество символов в шифртексте (i);
o Нормировать частоты символов вычисленные в пункте а). Результат поместить в массив FiМ
3. Найти такое значение k при котором сумма одноименных разностей d была бы минимальной
o вычислить для всех значений k=0..26 суммы разностей , где
o найти минимальную сумму разностей d
o Запомнить значение k
4. Расшифровать шифртекст с ключом Key=33-k
Исходные данные, которые были применены для выполнения поставленной задачи
Вариант №3
Алфавит А1: Цифры, заглавные буквы русского алфавита и пробел (*)
Алфавит А2: Буквы латинского алфавита.
Ключ 10.
Распределение частот появление символов русского алфавита
А |
0.065 |
Е |
0.072 |
К |
0.028 |
П |
0.023 |
Ф |
0.002 |
Щ |
0.003 |
Ю |
0.006 |
Б |
0.014 |
Ж |
0.007 |
Л |
0.035 |
Р |
0.040 |
Ч |
0.009 |
Ы |
0.016 |
Я |
0.018 |
В |
0.038 |
З |
0.016 |
М |
0.026 |
С |
0.045 |
Ц |
0.004 |
Ъ |
0.014 |
└┘ |
0.175 |
Г |
0.013 |
И |
0.062 |
Н |
0.053 |
Т |
0.053 |
Ч |
0.012 |
Ь |
0,019 |
||
Д |
0.025 |
Й |
0.010 |
О |
0.090 |
У |
0.021 |
Ш |
0.006 |
Э |
0.003 |
Скриншоты работы программы
Исходный код программы
1)
unitUnit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Menus;
const a='0123456789abcdefghijklmnopqrstuvwxyz:';
u='abcdefghijklmnopqrstuvwxyz:';
type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
Button1: TButton;
LabeledEdit1: TLabeledEdit;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
Button3: TButton;
Memo3: TMemo;
Label3: TLabel;
Label4: TLabel;
LabeledEdit2: TLabeledEdit;
Memo4: TMemo;
Memo5: TMemo;
Memo6: TMemo;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var b,c: string;
i,j,k,z:integer;
begin
b:=string(Memo1.text);
for i:=1 to length(b) do
begin
case b[i] of
'a': b[i]:='a';
'b': b[i]:='b';
'c': b[i]:='c';
'd': b[i]:='d';
'e': b[i]:='e';
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.