Высокоуровневые методы информатики и программирования
СОДЕРЖАНИЕ: Целью курсовой работу является реализация криптографического алгоритма шифрования и дешифрования с использованием шифра Виженера., , , . , « », , .
, , , . . : , , .
- , « » ( , - ) - . , . . - . , . . XVI . XVI . , , XIX .
I . , . Enigma, 1917 . .
.
1.
, , .
. , x1 , x2 , x3 , ….. xn , …… x2n , ….., . (, n ). , - , - ….. n- - n-, n+1 , . , - , , . , , , .
2.
(. Chiffre de Vigenre) - .
. . (. Giovan Battista Bellaso) La cifra del. Sig. Giovan Battista Bellaso 1553 , , XIX , . , .
.1
#justify.2
#justifyATTACKATDAWN
, , («LEMON») , :
A L, . L L A . ; X E T.
.
:ATTACKATDAWN
:LEMONLEMONLE
: LXFOPVEFRNHR
: , ; . , , . .
A-Z 0-25, :
:
, , DANCE. , . «» ABC, « » , « » :
, , , , , - :
DBPCF. , , . ( «» ), , : , :
.3
«» , . , . :
1. . . , 2- , 3- . . (, ), .
2.. l- ( l - ), .
.
.3.1
1863 , , #justify:ABCDEF AB CDEFA BCD EFABCDEFABCD
:CRYPTO IS SHORT FOR CRYPTOGRAPHY
: CSASXT IT UKSWT GQU GWYQVRKWAQJB
, . , :
:ABCDAB CD ABCDA BCD ABCDABCDABCD :CRYPTO IS SHORT FOR CRYPTOGRAPHY :CSASTP KV SIQUT GQU CSASTPIUAQJB
, . , :
:
DYDUXRMH 18, , : 18, 9, 6, 3 2. NQD 20. , 20 10, 5, 4 2. , , ( ) 2.
.3.2
( -) 1920 . #justify
:
- (26 ), - , - . , , . .
.4
, , . , ; - , . , , . , , . , , . , , , .
.5
running key (. - ) - . , . , ( ). 1920 . running key , (, ) . , , , .
- #justify.6
, , , , «», , , «».
:
«»
«». «». «».
3.
, , . , , , ( - ). , , , , , . , 1836 . , , , . , .
, . Delphi ().
, .
, , , , , .
1... , .. , .. , .. . . - : , 2006
2.David, Kahn. On the Origin of a Species. The Codebreakers: The Story of Secret Writing. Simon Schuster, 1999
3.Henk C.A. van Tilborg, ed. Encyclopedia of Cryptography and Security (First ed.). Springer. pp. 115, 2005
4.. . . . - : , 2007
.. . , . . , . . , . . . . - : , 2005
unit TablVin;
interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, , Grids, ComCtrls, ExtCtrls, StdCtrls, Buttons, Menus, hlp;= class(TForm): TPageControl;: TTabSheet;: TTabSheet;: TStringGrid;: TPanel;: TSpeedButton;: TSpeedButton;: TStringGrid;: TPopupMenu;: TMenuItem;: TEdit;: TLabel;: TMemo;: TMemo;: TSpeedButton;: TSpeedButton;: TSpeedButton;: TSpeedButton;: TStatusBar;: TOpenDialog;: TSaveDialog;: TSpeedButton;: TMainMenu;: TMenuItem;: TMenuItem;: TTimer;: TSpeedButton;: TSpeedButton;: TLabel;: TLabel;: TLabel;: TButton;: TButton;: TMenuItem;: TLabel;: TButton;: TButton;FormCreate(Sender: TObject);N1Click(Sender: TObject);FormClose(Sender: TObject; var Action: TCloseAction);Edit1KeyPress(Sender: TObject; var Key: Char);REd1KeyPress(Sender: TObject; var Key: Char);SG2KeyPress(Sender: TObject; var Key: Char);SB1Click(Sender: TObject);SB2Click(Sender: TObject);REd2KeyPress(Sender: TObject; var Key: Char);SB7Click(Sender: TObject);SB3Click(Sender: TObject);SB5Click(Sender: TObject);N3Click(Sender: TObject);SB4Click(Sender: TObject);SB6Click(Sender: TObject);LokBut(Sender: TObject);SpeedButton1Click(Sender: TObject);SpeedButton2Click(Sender: TObject);Button1Click(Sender: TObject);Button2Click(Sender: TObject);N4Click(Sender: TObject);Button3Click(Sender: TObject);Button4Click(Sender: TObject);
{ Private declarations }
{ Public declarations };= [a..z, 0..9];Rez :TStrings; Old1, Old2 :String;:Set of Char; // : TForm1;Det0(Tb :TStringGrid):Boolean;Invert(S :String; N :LongInt):String;KeyR(Tb :TStringGrid; Zn :Char; N :Integer=0):Integer;KeyS(Tb :TStringGrid; Zn :Char; N :Integer=0):Integer;Znak(Tb :TStringGrid; C, R :LongInt):Char;
{$R *.dfm}TForm1.FormCreate(Sender: TObject);ColL :LongInt; Lst :TStrings;:= [];:= 0; // :=TStringList.Create;.Clear;FileExists( ExtractFilePath(ParamStr(0))+Grid.cfg ) Then.LoadFromFile( ExtractFilePath(ParamStr(0))+Grid.cfg );:= Lst.Count;.RowCount := ColL;.Free;;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.Visible:=False;.ActivePage:=TabSheet2;FileExists(ExtractFilePath(ParamStr(0))+Grid.cfg) Then.Cols[0].LoadFromFile(ExtractFilePath(ParamStr(0))+Grid.cfg);
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.ColCount := ColL;.RowCount := Sg1.ColCount;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.Click;(REd1.Lines.Count0)OR(REd2.Lines.Count0)Then SB7.Enabled:=True ELSE.Enabled:=False;;Det0(Tb :TStringGrid):Boolean;
VAR R :LongInt; //
Det0:=True;R:=0 To Tb.RowCount-1 DoTb.Cells[0, R]= Then:=True;(!); Break;ELSE Det0:=False;;TForm1.N1Click(Sender: TObject);R, I :LongInt; Ms, Sd :String;Det0(SG2) Then Exit;
//=============================================== := [];I:=0 To Sg2.RowCount - 1 Do:= Cont + [ Znak(Sg2, 0, I) ];;
//===============================================.Enabled:=False;:=;I:=0 To Sg2.RowCount-1 Do:=MS+SG2.Cells[0, I];R:=0 To SG1.RowCount-1 Do.Rows[R].Clear;:=Invert(MS, R);I:=1 to Length(Sd) Do.Rows[R].Add( Sd[I] );;.Enabled:=True;;TForm1.FormClose(Sender: TObject; var Action: TCloseAction);Det0( Sg2 ) = False Then.Cols[0].SaveToFile(ExtractFilePath(ParamStr(0))+Grid.cfg);;Invert(S :String; N :LongInt):String;S1, S2, Sum :String;(S=)OR(NLength(S))Then Exit;
///////////////////////////N0 Then:=; S2:=;:=Copy(S, 1, N);:=Copy(S, N+1, Length(S)-N);:=S2+S1;:=Sum;ELSEN=0 Then:=S;;(!); Exit;;;TForm1.Button1Click(Sender: TObject);.showmodal;;TForm1.Button2Click(Sender: TObject);.Visible:=Not SG1.Visible;;TForm1.Button3Click(Sender: TObject);.ActivePage:=TabSheet1;;TForm1.Button4Click(Sender: TObject);.ActivePage:=TabSheet2;;TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);Key OF
.., #8, #9: ;
.., a..z: Key:=Chr(Ord(Key)-32);
, : Key:=;
// ELSE Key:=#0;;Not (Key in Cont) Then Key:=#0;;TForm1.REd1KeyPress(Sender: TObject; var Key: Char);Key OF
.., #8, #9, #13, #10, : ;
.., a..z: Key:=Chr(Ord(Key)-32);
, : Key:=;
0..9: ;;;TForm1.REd2KeyPress(Sender: TObject; var Key: Char);Key OF
.., #8, #9, #13, #10, : ;
.., a..z: Key:=Chr(Ord(Key)-32);
, : Key:=;
0..9: ;
// ELSE Key:=#0;;;TForm1.SG2KeyPress(Sender: TObject; var Key: Char);Key OF
.., #8, #9, #13, #10, : ;
.., a..z: Key:=Chr(Ord(Key)-32);
, : Key:=;
0..9: ;
// ELSE Key:=#0;;;KeyR(Tb :TStringGrid; Zn :Char; N :Integer=0):Integer;
Var R :LongInt; // : // 1-
Result:=0;R:=0 To Tb.RowCount-1 Do.ProcessMessages();Tb.Cells[N, R]=Zn Then Begin Result:=R; Break; End;;;KeyS(Tb :TStringGrid; Zn :Char; N :Integer=0):Integer;
Var C :LongInt; // : // :=0;
For C:=0 To Tb.ColCount-1 Do.ProcessMessages();Tb.Cells[C, N]=Zn Then Begin Result:=C; Break; End;;;Znak(Tb :TStringGrid; C, R :LongInt):Char;//:=Tb.Cells[C, R][1];;TForm1.SB1Click(Sender: TObject);I, J, K :LongInt; Key, Txt, Oyt :String; Ch :Char; A, B :Longint;// Edit1.Text= Then Exit;.Enabled:=False;.Enabled:=False;.Enabled:=False;.Enabled:=False;.Enabled:=False;.Enabled:=False;:=Edit1.Text;:=1;.Lines.Clear; //K:=0 To REd1.Lines.Count-1 DoOyt:=;:=REd1.Lines.Strings[ K ]; //I:=1 To Length(Txt{REd1.Lines.Text})Do.ProcessMessages(); //
///////////////////////////////{REd1.Lines.Text[I]}Txt[I] in Cont{[.., ]} Then:=Key[J];:=KeyR(SG1, Ch, 0) ; // :=Txt[I]; //REd1.text[I];
B:=KeyS(SG1, Ch, 0) ; //
//REd2.Text:=REd2.Text+Znak(SG1, B, A);:=Oyt+Znak(SG1, B, A);J=Length(Key)-1 Then J:=J+1 ELSE J:=1; //ELSE//:=Txt[ I ];
//REd2.Text:=REd2.Text+Ch;:=Oyt+Ch;;
///////////////////////////////;.Lines.Add(Oyt);;.Enabled:=True;.Enabled:=True;.Enabled:=True;.Enabled:=True;.Enabled:=True;.Enabled:=True;;TForm1.SB2Click(Sender: TObject);I, J, K :LongInt; Key, Txt, Oyt :String; Ch :Char; A, B :Longint;// Edit1.Text= Then Exit;.Enabled:=False;.Enabled:=False;.Enabled:=False;.Enabled:=False;.Enabled:=False;.Clear; //:=Edit1.Text;:=1;K:=0 To REd2.Lines.Count-1 DoOyt:=;:=REd2.Lines.Strings[K];.ProcessMessages(); //I:=1 To Length( Txt ) DO.ProcessMessages();
//////////////////////////////Txt[I] IN Cont{[.., ]} Then:=Key[J];:=KeyR(SG1, Ch, 0) ; // :=Txt[I]; //REd2.text[I];
B:=KeyS(SG1, Ch, A) ; // Main
//REd1.Text:=REd1.Text+Znak(SG1, B, 0);:=Oyt+Znak(SG1, B, 0);J=Length(Key)-1 Then J:=J+1 ELSE J:=1; //ELSE:=Txt[ I ];
//REd1.Text:=REd1.Text+Ch;:=Oyt+Ch;;
//////////////////////////////;.Lines.Add(Oyt);;.Enabled:=True;.Enabled:=True;.Enabled:=True;.Enabled:=True;.Enabled:=True;.Enabled:=True;;TForm1.SB7Click(Sender: TObject);// REd1.Lines.Count0 Then REd1.Clear;REd2.Lines.Count0 Then REd2.Clear;.Enabled:=False; SB1.Enabled:=False;.Enabled:=False; SB4.Enabled:=False;.Enabled:=False;.Panels[0].Text:=;.Panels[1].Text:=;;TForm1.SB3Click(Sender: TObject);
begin.Title:= ...;
IF OD1.Execute Then.Panels[0].Text:=ExtractFileName( OD1.FileName );:=OD1.FileName;.ProcessMessages(); //.FileName:=Old1;.Lines.LoadFromFile( Old1 );; ShowMessage(: +Old1);.Panels[0].Text:=; SD1.FileName:=;;.FileName:=;;;TForm1.SB5Click(Sender: TObject);
begin.Title:= ...;
IF OD1.Execute Then.Panels[1].Text:=ExtractFileName( OD1.FileName );:=OD1.FileName;.ProcessMessages(); //.Lines.LoadFromFile( Old2 );; ShowMessage(: +Old2);.Panels[1].Text:=;;.FileName:=;;;TForm1.N3Click(Sender: TObject);.Visible:=Not SG1.Visible;;TForm1.N4Click(Sender: TObject);
begin( . 313 : 2012);
end;TForm1.SB4Click(Sender: TObject);
Label 0;.Title:= ...;
IF SBar1.Panels[0].Text= Then
: IF SD1.Execute Then:=SD1.FileName;.ProcessMessages();.Lines.SaveToFile( Old1 );.Panels[0].Text:=ExtractFileName( Old1 );;ELSEMessageBox(Handle, PChar( +
#13++Old1++
#13 . ), , _YESNO+MB_ICONINFORMATION)=MrYes Then.Lines.SaveToFile(Old1) ELSE GoTo 0;
//SBar1.Panels[0].Text.FileName:=;;TForm1.SB6Click(Sender: TObject);
Label 1;.Title:= ...;
IF SBar1.Panels[1].Text= Then
: IF SD1.Execute Then:=SD1.FileName;.ProcessMessages();.Lines.SaveToFile( Old2 );.Panels[1].Text:=ExtractFileName( Old2 );;ELSEMessageBox(Handle, PChar( +
#13++Old2++
#13 . ), , _YESNO+MB_ICONINFORMATION)=MrYes Then.Lines.SaveToFile( Old2 ) ELSE GoTo 1;
//SBar1.Panels[0].Text.FileName:=;;TForm1.LokBut(Sender: TObject);// REd1.Lines.Count0 Then.Enabled:=True;.Enabled:=True;ELSEREd1.Lines.Count=0 Then.Enabled:=False;.Enabled:=False;;REd2.Lines.Count0 Then.Enabled:=True;.Enabled:=True;ELSEREd2.Lines.Count=0 Then.Enabled:=False;.Enabled:=False;;(REd1.Lines.Count0)OR(REd2.Lines.Count0)Then SB7.Enabled:=True ELSE.Enabled:=False;.Caption:=Format(- [R=%d, C=%d],
[SG1.RowCount, SG1.ColCount]);
// STRINGGRID DelCol(SG: TStringGrid);I, J :LongInt;// SG do:= ColCount - 1;[ J ].Clear;I:=J to ColCount - 2 do[ I ].Assign( Cols[ I+1 ] );:= ColCount - 1;;;DelRow(SG: TStringGrid);I, J :LongInt;// SG do:= RowCount - 1; // [ J ].Clear;I:=J to RowCount - 2 do[I].Assign( Rows[ I+1 ] );:= RowCount - 1;;;InsRow(SG: TStringGrid);// SG do:= RowCount + 1;;InsCol(StrGrid: TStringGrid);// .ColCount := StrGrid.ColCount + 1;;TForm1.SpeedButton1Click(Sender: TObject);
begin // SG2.RowCount256 Then
begin( Sg2 );( Sg1 );( SG1 );ELSE Beep;;TForm1.SpeedButton2Click(Sender: TObject);
begin // Sg2.RowCount33 Then
Begin( Sg2 );( Sg1 );( SG1 );ELSE Beep;
end;.
(tabula recta)
ABCDEFGHIJKLM NO PQR STU VW XYZAABCDEFGHIJKLM NO PQR STU VW XYZBBCDEFGHIJKLM N O PQRSTUV W X YZACCDE FGHIJKLM NO PQR STU VW XY ZABDDEFGHIJKLM N O PQRSTUV W X YZABCEEFGHIJKLM NO PQR STUVW XY ZABCDFFGH IJKLM N O PQRSTUVW X YZABCDEGGHI JKLM N O PQRSTU VW XY ZABCDEFHHIJKLM N O PQRSTUV W X YZABCDEFGIIJKLM NO PQR STUVW XYZABCDEFGHJJKLM NO PQRSTUVW XYZABCDEFGHIKKLM N O PQRSTU VW XYZABCDEFGHIJLLM NO PQRSTUV W X YZABCDEFGHIJKMM N O PQRSTU V W X Y ZABCDEFGHIJKLNN O PQRSTU V W X YZABCDEFGHIJKLMOO PQRSTU V W XY ZABCDEFGHIJKLM NPPQR STUV W X YZABCDE FGHIJKLM N OQQRSTU V W X Y ZABCDEFGHIJKLM NO PRRSTU V W X Y ZABCDE FGHIJKLM N O PQSSTUV W XY ZABCDEFGH I JKLM NO PQRTTU VW X YZABCDEFGHI JKLM N O PQRSUU V W X Y ZABCDEFGH I JKLM NO PQRSTVV W XY ZABCDE FGHI JKLM N O PQRSTUWW X YZABCDEFGHIJKLM N O PQRSTU VXX Y ZABCDEFGHIJKLM N O PQRSTUV WYY ZABCDEFGH IJKLM NO PQRSTUVW XZZABCDEFGHI JKLM N O PQRSTUVW X Y