Реферат: Гибридная система шифрования ГСШ-11
Название: Гибридная система шифрования ГСШ-11 Раздел: Рефераты по информатике Тип: реферат | |||||||||
Курский Государственный Университет Кафедра программного обеспечения и администрирования информационных систем по дисциплине «Программно-аппаратная защита информации» Тема: Гибридная система шифрования (ГСШ-11) Выполнила: студент гр. 52 Ковалёв К.Н. Принял: д.т.н., профессор Лопин В.Н. СОДЕРЖАНИЕ 1. ЗАДАНИЕ НА ПРОЕКТИРОВАНИЕ .. 3 3. РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ ГСШ-11 . 15 Разработать прикладное программное обеспечение, реализующее гибридную систему шифрования символьной информации в соответствии с заданным вариантом курсовой работы. При выполнении курсовой работы использовать представленную ниже структуру гибридной системы шифрования (ГСШ): В приведенных структурах используются следующие обозначния: V – шифрование методом полиалфавитной замены; S – шифрование методом скремблирования; T – исходный текст; F1 - промежуточный шифртекст; F - результирующий шифртекст. Формализация исходных данных методов шифрования: · Исходные данные метода V определяются длиной ключа K. · Исходные данные метода S определяются тройкой (conf, C0 , n), где: 1. conf – конфигурация генератора псевдослучайных чисел, определяющая расположение сумматоров по модулю два в обратной связи генератора: 2. C0 – начальное состояние генератора; 3. n – количество двоичных разрядов генератора.
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): |