Министерство образования и науки Украины
Сумской государственный университет
Кафедра информатики
Лабораторная работа №3
" Шифры сложной замены. Двойной квадрат Уитстона "
Выполнила
студентка ММФ
группы ИН-51
Ковалёва Ирина
Проверил
преподаватель
Дунь А.В.
Сумы
2008
Постановка задачи
1. Ознакомиться с теоретическими сведениями о шифре "Двойной квадрат Уитстона"
2. Выполнить программную реализацию шифрования и дешифрование данных с помощью шифра "Двойной квадрат Уитстона" на любом алгоритмическом языке , согласно своему варианту.
3. Протестировать работу программы.
4. Оформить отчёт.
Информационная часть работы
В 1854 г. англичанин Чарльз Уитстон разработал новый метод шифрования биграммами, который называют "двойным квадратом".
Пусть имеются две таблицы со случайно расположенными в них русскими алфавитами (рис.1). Перед шифрованием исходное сообщение разбивают на биграммы. Каждая биграмма шифруется отдельно. Первую букву биграммы находят в левой таблице, а вторую букву - в правой таблице. Затем мысленно строят прямоугольник так, чтобы буквы биграммы лежали в его противоположных вершинах. Другие две вершины этого прямоугольника дают буквы биграммы шифртекста.
Рисунок 1 - Две таблицы со случайно расположенными символами русского алфавита для шифра "двойной квадрат"
Предположим, что шифруется биграмма исходного текста ИЛ. Буква И находится в столбце 1 и строке 2 левой таблицы. Буква Л находится в столбце 5 и строке 4 правой таблицы. Это означает, что прямоугольник образован строками 2 и 4, а также столбцами 1 левой таблицы и 5 правой таблицы. Следовательно, в биграмму шифртекста входят буква О, расположенная в столбце 5 и строке 2 правой таблицы, и буква В, расположенная в столбце 1 и строке 4 левой таблицы, т.е. получаем биграмму шифртекста ОВ.
Если обе буквы биграммы сообщения лежат в одной строке, то и буквы шифртекста берут из этой же строки. Первую букву биграммы шифртекста берут из левой таблицы в столбце, соответствующем второй букве биграммы сообщения. Вторая же буква биграммы шифртекста берется из правой таблицы в столбце, соответствующем первой букве биграммы сообщения. Поэтому биграмма сообщения ТО превращается в биграмму шифртекста БЖ. Аналогичным образом шифруются все биграммы сообщения:
Сообщение ПР ИЛ ЕТ АЮ Ш ЕС ТО ГО
Шифртекст ПЕ ОВ ЩН ФМ ЕШ РФ БЖ ДЦ
Дешифрование происходит аналогично шифрованию, только таблицы, применяющиеся при шифровании, меняются местами
Шифрование методом "двойного квадрата" дает весьма устойчивый к вскрытию и простой в применении шифр. Взламывание шифртекста "двойного квадрата" требует больших усилий, при этом длина сообщения должна быть не менее тридцати строк.
Листингпрограммы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, jpeg, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Memo1: TMemo;
Memo2: TMemo;
Memo3: TMemo;
Memo4: TMemo;
Memo5: TMemo;
Memo6: TMemo;
Memo7: TMemo;
Button4: TButton;
Button5: TButton;
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
n=6;
type
Matr=array[0..n-1,0..n-1] of char;
const
alfavit:Matr= (('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','0','2','4','6'),('8','<','>','+','-','*'));
var
Form1: TForm1;
kvadrat1,kvadrat2:Matr;
text1, shifr,bigramaSh,bigramaTxt,outtext,bigramaout:string;
implementation
{$R *.dfm}
//********процедура заполнения квадрата*******
procedure Sort(a:Matr; var b: Matr);
var
i,j,i1,j1,i2,j2,k:integer;
q:char;
begin
Randomize;
for i:=0 to n-1 do
for j:=0 to n-1 do
b[i][j]:=a[i][j];
for k:=1 to 100 do
begin
i1:=random(6);
j1:=random(6);
i2:=random(6);
j2:=random(6);
q:=b[i1][j1];
b[i1][j1]:=b[i2][j2];
b[i2][j2]:=q;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.