Смекни!
smekni.com

Гибридная система шифрования ГСШ-11

Курский Государственный Университет

Кафедра программного обеспечения и администрирования информационных систем

КУРСОВАЯ РАБОТА

по дисциплине «Программно-аппаратная защита информации»

Тема: Гибридная система шифрования (ГСШ-11)

Выполнила:

студент гр. 52 Ковалёв К.Н.

Принял:

д.т.н., профессор Лопин В.Н.

Курск 2009

СОДЕРЖАНИЕ

1. ЗАДАНИЕ НА ПРОЕКТИРОВАНИЕ.. 3

2. ЛИСТИНГ ПРОГРАММЫ... 4

3. РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ ГСШ-11. 15


1. ЗАДАНИЕ НА ПРОЕКТИРОВАНИЕ

Разработать прикладное программное обеспечение, реализующее гибридную систему шифрования символьной информации в соответствии с заданным вариантом курсовой работы.

При выполнении курсовой работы использовать представленную ниже структуру гибридной системы шифрования (ГСШ):


В приведенных структурах используются следующие обозначния:

V – шифрование методом полиалфавитной замены;

S – шифрование методом скремблирования;

T – исходный текст;

F1 - промежуточный шифртекст;

F - результирующий шифртекст.

Формализация исходных данных методов шифрования:

· Исходные данные метода V определяются длиной ключа K.

· Исходные данные метода S определяются тройкой (conf, C0, n), где:

1. conf – конфигурация генератора псевдослучайных чисел, определяющая расположение сумматоров по модулю два в обратной связи генератора:

2. C0 – начальное состояние генератора;

3. n – количество двоичных разрядов генератора.

k conf C0 n
8 1362 834 14

2. ЛИСТИНГ ПРОГРАММЫ

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, Grids, Math, Buttons;

type

TForm1 = class(TForm)

GroupBox2: TGroupBox;

Memo1: TMemo;

GroupBox1: TGroupBox;

Button1: TButton;

Button4: TButton;

Button3: TButton;

Memo2: TMemo;

Button2: TButton;

Button7: TButton;

Button8: TButton;

Button9: TButton;

GroupBox4: TGroupBox;

Memo3: TMemo;

Label1: TLabel;

Label3: TLabel;

Label4: TLabel;

Button5: TButton;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

Button10: TButton;

Button11: TButton;

Button6: TButton;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

LabeledEdit1: TLabeledEdit;

BitBtn4: TBitBtn;

Button12: TButton;

Label2: TLabel;

procedure Button1Click(Sender: TObject);

procedure Matrix;

procedure FormCreate(Sender: TObject);

procedure Zashifr;

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

Procedure Rashifr;

procedure Button4Click(Sender: TObject);

procedure Button7Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure Button9Click(Sender: TObject);

procedure SymvToBit(cq:char);

function CodeToSymv: integer;

procedure Posl;

procedure NachC(var j,k:longint;n:Byte);

procedure Button8Click(Sender: TObject);

procedure Button10Click(Sender: TObject);

procedure Button11Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

procedure BitBtn4Click(Sender: TObject);

procedure Button12Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

alf,s: String;

M:array of String;

Z,key,C,T: array of byte;

p:longint;

FName:String;

F:TextFile;

NText:TMemo;

implementation

{$R *.dfm}

procedure TForm1.Button3Click(Sender: TObject); //1z

Var Ch:Char;

begin

memo1.Text:='';

memo2.Text:='';

memo3.Text:='';

If OpenDialog1.Execute then

Begin

AssignFile(F,OpenDialog1.FileName);

FName:=OpenDialog1.FileName;

Reset(F);

If IOResult=0 then Begin

While not Eof(f) do

Begin

Read(F,Ch);

Memo1.Text:=Memo1.Text+Ch;

End;

CloseFile(F);

End;

End;

end;

procedure TForm1.Button5Click(Sender: TObject); //1s

begin

FName:='Скремблер';

SaveDialog1.FileName:=Fname;

If SaveDialog1.Execute then Fname:=SaveDialog1.FileName;

Memo1.Lines.SaveToFile(FName);

end;

procedure TForm1.Matrix; //Матрица V

Var i,k:word;

Begin

Setlength(M,length(s)+1);

M[0]:=alf;

For i:=1 to Length(s) do

Begin

k:=pos(s[i],alf);

M[i]:=Copy(alf,k,length(alf)-k+1)+copy(alf,1,k-1);

End;

End;

Procedure TForm1.Zashifr;//Процедура шифрования

Var k,j,l:wORD;

i:longword;

Begin

Matrix;

Memo3.Text:='';

i:=1;

k:=1;

While i<Length(Memo1.Text)+1 do

Begin

If k=Length(s)+1 then Begin

k:=1;

End;

j:=1;

While M[j][1]<>s[k] do

j:=j+1;

l:=pos(Memo1.Text[i],M[0]);

Memo3.Text:=Memo3.Text+M[j][l];

k:=k+1;

i:=i+1;

End;

End;

Procedure TForm1.Rashifr;//Процедура дешифрования

Var k,j,l:wORD;

i:longword;

Begin

Matrix;

Memo2.Text:='';

i:=1;

k:=1;

While i<Length(Memo1.Text)+1 do

Begin

If k=Length(s)+1 then Begin

k:=1;

End;

j:=1;

While M[j][1]<>s[k] do

j:=j+1;

l:=pos(Memo1.Text[i],M[j]);

Memo2.Text:=Memo2.Text+M[0][l];

k:=k+1;

i:=i+1;

End;

End;

//Дешифрование V

procedure TForm1.Button4Click(Sender: TObject);

begin

Button12.Visible:=True;

LabeledEdit1.Visible:=True;

end;

//Шифрование V

procedure TForm1.Button1Click(Sender: TObject);

Var u:Integer;

begin

LabeledEdit1.Visible:=True;

BitBtn4.Visible:=True;

end;

procedure TForm1.FormCreate(Sender: TObject);

var i:byte;

begin

Memo1.Text:='';

Button12.Visible:=False;

LabeledEdit1.Visible:=False;

BitBtn4.Visible:=False;

For i:=0 to 255 Do

alf:=alf+char(i);

end;

Procedure TForm1.NachC(var j,k:longint;n:Byte);//Формир-ние битовых послед-ностей:

Var i:Byte; // конфигурация и начальное состояние

Begin

SetLength(Z,n);

SetLength(key,n);

For i:=n-1 downto 0 do

Begin

If j>1 then Begin

Z[i]:=j mod 2;

j:=j div 2;

End

Else if j=1 then

Begin

Z[i]:=1;

j:=0;

End

Else Z[i]:=0;

If k>1 then Begin

key[i]:=k mod 2;

k:=k div 2;

End

Else if k=1 then

Begin

key[i]:=1;

k:=0;

End

Else key[i]:=0;

End;

End;

Procedure TForm1.Posl;//Формирование псевдослуч. посл-ти

Var Q: array of byte;

k:Byte;

j,i:Integer;

Begin

Setlength(Q,Length(Z));

Setlength(C,Trunc(IntPower(2,Length(Z))));

For j:=0 to Length(Z)-1 do

Q[j]:=key[j];

j:=0;

While j<Trunc(IntPower(2,Length(Z))) do

Begin

i:=High(Z);

p:=Q[i];

While i>0 do

Begin

If Z[i-1]=1 then p:=p xor q[i-1];

i:=i-1;

End;

C[j]:=Q[High(Q)];

For k:=High(Q) downto 1 do

Q[k]:=Q[k-1];

Q[0]:=p;

p:=0;

For k:=0 to High(Q) do

If Q[k]=key[k] then p:=p+1;

If p=Length(Q) then Begin

p:=j;

j:=Trunc(IntPower(2,Length(Z)));

End

else j:=j+1;

End;

Label2.Caption:='Длина последовательности='+IntToStr(p);

End;

Procedure TForm1.SymvToBit(cq:char);//Преобразования символа в бит.посл-ть

Var k,j:Byte;

Begin

j:=ord(cq);//символ переводится в его порядковый № в таблице символов

For k:=7 downto 0 do

Begin

If j>1 then Begin

T[k]:=j mod 2;

j:=j div 2;

End

Else if j=1 then

Begin

T[k]:=1;

j:=0;

End

Else T[k]:=0;

End;

End;

Function TForm1.CodeToSymv: integer; //Преобразование кода в символ

Var k:Byte;

Z,i:Integer;

Begin

Z:=0;

For k:=0 to 7 do

Z:=Z+T[k]*Trunc(IntPower(2,7-k));

CodeToSymv:=Z;

End;

procedure TForm1.Button7Click(Sender: TObject); //2z

Var Ch:Char;

begin

memo2.Text:='';

memo3.Text:='';

If OpenDialog1.Execute then

Begin

AssignFile(F,OpenDialog1.FileName);

FName:=OpenDialog1.FileName;

Reset(F);

If IOResult=0 then Begin

While not Eof(f) do

Begin

Read(F,Ch);

Memo2.Text:=Memo2.Text+Ch;

End;

CloseFile(F);

End;

End;

end;

procedure TForm1.Button8Click(Sender: TObject); //Шифрование S

Var conf,c0:LongInt;

n:Byte;

k:Longword;

j,l:Word;

i:byte;

begin

conf:=1362;

c0:=834;

n:=14;

NachC(conf,c0,n);

Posl;

Setlength(T,8);

j:=0;

Memo1.Text:='';

For k:=1 to Length(Memo2.Text) do

Begin

SymvToBit(Memo2.Text[k]);

If j<p-1 then For l:=0 to 7 do

Begin

T[l]:=C[j] xor T[l];

j:=j+1;

End

Else

Begin

T[l]:=C[j] xor T[l];

j:=0;

End;

Memo1.Text:=Memo1.Text+char(CodeToSymv);

End;

end;

procedure TForm1.Button2Click(Sender: TObject); //2s

begin

FName:='Полиалфиват';

SaveDialog1.FileName:=Fname;

If SaveDialog1.Execute then Fname:=SaveDialog1.FileName;

Memo2.Lines.SaveToFile(FName);

End;

procedure TForm1.Button6Click(Sender: TObject); //3s

begin

FName:='шифр-текст';

SaveDialog1.FileName:=Fname;

If SaveDialog1.Execute then Fname:=SaveDialog1.FileName;

Memo3.Lines.SaveToFile(FName);

end;

procedure TForm1.Button9Click(Sender: TObject); //Дешифрование S

Var conf,c0:LongInt;

n:Byte;

k:Longword;

j,l:Word;

i:byte;

begin

conf:=1362;

c0:=834;

n:=14;

NachC(conf,c0,n);

Posl;

Setlength(T,8);

j:=0;

Memo3.Text:='';

For k:=1 to Length(Memo2.Text) do

Begin

SymvToBit(Memo2.Text[k]);

If j<p-1 then For l:=0 to 7 do

Begin

T[l]:=C[j] xor T[l];

j:=j+1;

End

Else

Begin

T[l]:=C[j] xor T[l];

j:=0;

End;

Memo3.Text:=Memo3.Text+char(CodeToSymv);

End;

end;

procedure TForm1.Button10Click(Sender: TObject);

begin

Memo1.Text:=Memo3.Text;

Memo2.Text:='';

Memo3.Text:='';

end;

procedure TForm1.Button11Click(Sender: TObject);//Новые параметры

begin

s:='';

Memo1.Text:='';

Memo2.Text:='';

Memo3.Text:='';

Label3.Visible:=False;

Label1.Visible:=False;

Button4.Visible:=False;

Button1.Visible:=False;

Button9.Visible:=False;

Button8.Visible:=False;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

Label3.Visible:=False;

Label1.Visible:=True;

Button4.Visible:=False;

Button1.Visible:=True ;

Button9.Visible:=False;

Button8.Visible:=True ;

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

Label1.Visible:=False;

Label3.Visible:=True;

Button1.Visible:=False;

Button4.Visible:=True;

Button8.Visible:=False;

Button9.Visible:=True ;

end;

procedure TForm1.BitBtn3Click(Sender: TObject);

begin

close

end;

procedure TForm1.BitBtn4Click(Sender: TObject);

Var u:Integer;

begin

LabeledEdit1.Visible:=True;

u:=0;

s :=LabeledEdit1.Text;

while u=0 do

begin

if Length(s)<>8 then

begin

MessageDlg('Длина ключа должна равняться 8! ', mtWarning, [mbOK], 0);

s := InputBox('Метод полиалфавитной замены','Попробуйте еще раз','');

end

else u:=u+1;

end;

BitBtn4.Visible:=False;

LabeledEdit1.Visible:=False;

Zashifr;

end;

procedure TForm1.Button12Click(Sender: TObject);

Var u:Integer;

begin

u:=0;

s :=LabeledEdit1.Text;

while u=0 do

begin

if Length(s)<>8 then

begin

MessageDlg('Длина ключа должна равняться 8!', mtWarning, [mbOK], 0);

s := InputBox('Метод полиалфавитной замены','Попробуйте еще раз','');

end

else u:=u+1;

end;

LabeledEdit1.Visible:=False;

button12.Visible:=False;

Rashifr;

end;

end.


3. РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ ГСШ-11

Результат шифрования с использованием гибридной системы шифрования (ГСШ-11):

Результат расшифрования с использованием гибридной системы шифрования (ГСШ-11):