Лабораторная работа №12 / Отчет №1защита информ
.docНегосударственное образовательное учреждение
высшего профессионального образования
Региональный открытый социальный институт
Кафедра программного обеспечения
ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ
«Методы и средства защиты компьютерной информации»
Вариант №12
Выполнил
студент
факультета информатики
и вычислительной
техники
5 курса заочного
отделения
Забелин П.Г.
Научный руководитель
Солошенко А.Е.
г. Курск
2009
Aлгоритм двойной перестановки.
Сначала в таблицу записывается текст сообщения, а потом поочередно переставляются столбцы, а затем строки. Cообщение «Неясное становится еще более непонятным» записывается с левого верхнего угла в таблицу из 6 строк и 7 столбцов по столбцам.
Ключом к шифру служат номера столбцов 126354 и номера строк 1237654 исходной таблицы. Число вариантов двойной перестановки достаточно быстро возрастает с увеличением размера таблицы: для таблицы 3 на 3 их 36, для 4 на 4 их 576, а для 5 на 5 их 14400.
Пример данного метода шифрования показан в следующих таблицах:
1.Исходная таблица:
Неясное становится еще более непонятным
1 2 3 4 5 6 7
1 Н е я с н о е
2 ? с т а н о в
3 и т с я ? е щ
4 е ? б о л е е
5 ? н е п о н я
6 т н ы м ? ? ?
2. Перестоновка по столбцам:
Неяеонс?ствонаитсще?яе?беело?неяноптны???м
1 2 3 7 6 5 4
1 Н е я е о н с
2 ? с т в о н а
3 и т с щ е ? я
4 е ? б е е л о
5 ? н е я н о п
6 т н ы ? ? ? м
3. Перестоновка по строкам:
1 2 3 4 5 6 7
1 Н с н е е е н
2 е ? а ? е я ы
6 е т т е о о ?
3 н о щ б н т м
5 о в с ? ? п ?
4 я с и я л н ?
В результате перестановки получена шифровка :
Нснееене?а?еяыеттеоо?нощбнтмовс??п?ясиялн?
Скриншот:
Листинг:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Grids, XPMan;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Knopka1: TBitBtn;
Edit1: TEdit;
XPManifest1: TXPManifest;
Shifr: TButton;
MainMemo: TMemo;
Save: TButton;
Label1: TLabel;
procedure FormActivate(Sender: TObject);
procedure Knopka1Click(Sender: TObject);
procedure ShifrClick(Sender: TObject);
procedure SaveClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
i,x,y,z,r,o,a,a2,a3,m,mx,m0: byte;
Text0,Text1: String;
ShifrStolb: array [1..7] of byte = (1,2,3,7,6,5,4); //ключ к столбцам 7 цифр
ShifrStrok: array [1..6] of byte = (1,2,6,3,5,4); //ключ к строкам 6 цифр
Hash: array [1..42] of string;
//---Save-----------------------------------------------------------------------
F:TextFile;
u,g:integer;
so:string;
implementation
{$R *.dfm}
//-----------------------Нумерация StringGrid-----------------------------------
procedure TForm1.FormActivate(Sender: TObject);
begin
for x := 1 to StringGrid1.RowCount-1 do
StringGrid1.Cells[0,x]:= inttostr(StringGrid1.Row+x-1);
for y := 1 to StringGrid1.ColCount-1 do
StringGrid1.Cells[y,0]:= inttostr(StringGrid1.Col+y-1);
Shifr.Enabled:= False;//выкл.кн. шифр
Save.Enabled := False;
end;
// -Проверка символов на количесво и изменение пробелов на другие символы-------
procedure TForm1.Knopka1Click(Sender: TObject);
begin
m :=(StringGrid1.RowCount-1)*(StringGrid1.ColCount-1); m0 :=m-1;
Shifr.Enabled:= True;
Text0 := edit1.Text;
i := length(Text0);
if i > m then ShowMessage ('Вы ввели больше '+inttostr(m)+' символов.Лишние обрезаны!');
if i < m then ShowMessage ('Вы ввели меньше '+inttostr(m)+' символов. Данные сохранены.');
SetLength (Text0,m);
for mx := 0 to m0 do
begin
if Text0[mx] = ' ' then Text0[mx] := #63;//заполнение ? между словами
end ;
for mx := i to m0 do Text0[mx+1] := #63; //заполнение ? лишнего пространства
end;
//------------------ Сортировка по столбцам ------------------------------------
procedure TForm1.ShifrClick(Sender: TObject);
begin
y:=1; x:=1; o:=1; a:=1; a2:=1; a3:=1;
for y := 1 to StringGrid1.RowCount-1 do
begin
for x := 1 to StringGrid1.ColCount-1 do
begin
StringGrid1.Cells[ShifrStolb[x],y]:= Text0[o];
o:=o+1;
end
end;
//---------------------копирование строки в кеш---------------------------------
begin
for y := 1 to StringGrid1.RowCount-1 do
begin
for x := 1 to StringGrid1.ColCount-1 do
begin
Hash[a]:=StringGrid1.Cells[x,y];
a:=a+1;
end ;
end;
//------------------ Сортировка по строкам -------------------------------------
begin
for x := 1 to StringGrid1.ColCount-1 do
begin
for y := 1 to StringGrid1.RowCount-1 do
begin
StringGrid1.Cells[x,ShifrStrok[y]]:= Hash[a2];
a2:=a2+1;
end;
end;
//-----------------------Вывод шифра--------------------------------------------
begin
for y := 1 to StringGrid1.RowCount-1 do
begin
for x := 1 to StringGrid1.ColCount-1 do
begin
Text1:= Text1+(StringGrid1.Cells[x,y]);
a3:=a3+1 ;
end;
end;
MainMemo.Lines.Add(text1);
Shifr.Enabled:= False;
Save.Enabled := True;
end;
end;
end;
end;
//---------------Запись в Файл--------------------------------------------------
procedure TForm1.SaveClick(Sender: TObject);
begin
AssignFile(f,'Result.txt');
Rewrite(f);
for u:=0 to StringGrid1.RowCount-1 do begin
so:='';
For g:=0 to StringGrid1.ColCount-1 do
so:=so+StringGrid1.Cells[g,u]+' ';
writeln(f,so);
writeln(f,'');
end;
CloseFile(f);
Save.Enabled := False;
end;
end.