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

Гибридная система шифрования ГСШ-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. РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ ГСШ-1
1


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



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


Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

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

Слов:1404
Символов:17681
Размер:34.53 Кб.