Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Текст программы биграммного шифрования Плейфера




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

Данная программа реализована на языке Delphi 7.

Delphi – Borland Delphi представляет собой средство разработки приложений для Microsoft Windows. Delphi является мощным и простым в использовании инструментом для создания автономных программ, обладающих графическим интерфейсом (GUI), или 32-битных консольных приложений (программ, которые не имеют графического интерфейса).

Ниже приведен текст программы «Биграммного шифрования Плейфейра»:

unit Unit1;

 

interface

 

uses

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

Dialogs, StdCtrls, ComCtrls, Grids, ExtCtrls, Buttons, XPMan, Menus;

 

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Button5: TButton;

Button6: TButton;

Button7: TButton;

Button8: TButton;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

Memo2: TMemo;

Memo3: TMemo;

Memo1: TMemo;

StringGrid1: TStringGrid;

GroupBox1: TGroupBox;

UpDown1: TUpDown;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

XPManifest1: TXPManifest;

StatusBar1: TStatusBar;

MainMenu1: TMainMenu;

File1: TMenuItem;

Exit1: TMenuItem;

Open1: TMenuItem;

Save1: TMenuItem;

N1: TMenuItem;

Savedecrypt1: TMenuItem;

Edit1: TMenuItem;

Crypt1: TMenuItem;

Decrypt1: TMenuItem;

Clear1: TMenuItem;

About1: TMenuItem;

About2: TMenuItem;

procedure Button2Click(Sender: TObject);

procedure Button7Click(Sender: TObject);

procedure Button8Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

procedure UpDown1Click(Sender: TObject; Button: TUDBtnType);

procedure Memo1KeyUp(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure Exit1Click(Sender: TObject);

procedure Save1Click(Sender: TObject);

procedure Savedecrypt1Click(Sender: TObject);

procedure Open1Click(Sender: TObject);

procedure Clear1Click(Sender: TObject);

procedure Crypt1Click(Sender: TObject);

procedure Decrypt1Click(Sender: TObject);

procedure About2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

a: array of array of char;

rowk,colk:integer;

alf:string;

implementation

 

uses AboutF;

 

{$R *.dfm}

 

 

procedure TForm1.Button2Click(Sender: TObject);

begin

 if OpenDialog1.Execute then

begin

memo1.Lines.LoadFromFile(OpenDialog1.FileName);

statusbar1.Panels[0].Text:='Текст загружен';

end;

end;

 

procedure TForm1.Button7Click(Sender: TObject);

begin

Memo1.Clear;

Memo2.Clear;

Memo3.Clear;

Memo1.SetFocus;

button4.Enabled:=false;

button5.Enabled:=false;

button6.Enabled:=false;

statusbar1.Panels[2].Text:=inttostr(length(memo1.Text));

statusbar1.Panels[0].Text:='Поле с открытым текстом очищенно';

form1.Decrypt1.Enabled:=false;

form1.Savedecrypt1.Enabled:=false;

form1.Save1.Enabled:=false;

end;

procedure TForm1.Button8Click(Sender: TObject);

begin

 close;

end;

 

procedure TForm1.Button5Click(Sender: TObject);

begin

if savedialog1.Execute then

 begin

Memo2.Lines.SaveToFile(savedialog1.FileName);

statusbar1.Panels[0].Text:='Зашифрованый текст сохранен';

 end;

end;

 

procedure TForm1.Button6Click(Sender: TObject);

begin

 if savedialog1.Execute then

begin

memo3.Lines.SaveToFile(savedialog1.FileName);

statusbar1.Panels[0].Text:='Расшифрованый текст сохранен';

end;

end;

 

 

//заполняем матрицу символами

procedure TForm1.Button1Click(Sender: TObject);

var

i,j,k:integer;

begin

k:=1;

colk:=form1.StringGrid1.ColCount;

rowk:=stringgrid1.RowCount;

setlength(a,colk,rowk);

alf:=#039+'ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯabcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя!@#№$;%^:&?*()-_+=[]/\{}<>.,123456789|~"Ї°±™ґµ¶'+#13#10;

for i:=0 to colk-1 do

for j:=0 to rowk-1 do

begin

    a[i,j]:=alf[k];

    with StringGrid1 do

      begin

         Cells[i,j]:=a[i,j];

         inc(k);

      end;

end;

button3.Enabled:=true;

statusbar1.Panels[3].Text:='Матрица загружена';

end;

 

function prob(ss:string;lenn:integer): string;

 var

 s1:string;

 i,j,k:integer;

 begin

 k:=0;

 while k<2 do begin

 For i:=1 to lenn do

if (ss[i]=ss[i+1]) then

begin

s1:='';

for j:=1 to i do

  s1:=s1+ss[j];

s1:=s1+'µ';

for j:=i+1 to lenn do

  s1:=s1+ss[j];

ss:=s1;

lenn:=Length(ss);

end;

 inc(k);

 Result:=ss;

end;

end;

 

 

procedure TForm1.Button3Click(Sender: TObject);

var

 s,t:string;

 k, i, j, len, x1, y1, x2, y2, c:integer;

begin

 

 t:=memo1.Text;

 len:=Length(t);

 if len>1 then

 begin

 s:=prob(t,len);

 

 len:=Length(s);

 if (len mod 2)=1 then

s:=s+' ';

 

 for i:=1 to len do

if (i mod 2 = 1) then

begin

for j:=0 to colk-1 do

  for c:=0 to rowk-1 do

    begin

     if s[i]=a[j,c] then

       begin

         x1:=j;

         y1:=c;

       end;

     if s[i+1]=a[j,c] then

       begin

         x2:=j;

         y2:=c;

       end;

    end;

if (x1=x2) then

  begin

   if y1=rowk-1 then s[i]:=a[x1,0]

    else s[i]:=a[x1,y1+1];

   if y2=rowk-1 then s[i+1]:=a[x1,0]

    else s[i+1]:=a[x1, y2+1];

  end;

if (y1=y2) then

  begin

   if x1=colk-1 then s[i]:=a[0,y1]

    else s[i]:=a[x1+1,y2];

   if x2=colk-1 then s[i+1]:=a[0,y1]

    else s[i+1]:=a[x2+1,y2];

  end;

if (y1<>y2) and (x1<>x2) then

  begin

   s[i]:=a[x1,y2];

   s[i+1]:=a[x2,y1];

  end;

end;

 memo2.text:=s;

 button4.Enabled:=true;

 button5.Enabled:=true;

 statusbar1.Panels[0].Text:='Текст зашифрован';

 form1.Decrypt1.Enabled:=true;

 form1.Save1.Enabled:=true;

 end

 else

begin

MessageDlg('Введите больше символов!', mtInformation, [mbOk], 0);

memo1.SetFocus;

statusbar1.Panels[0].Text:='Ошибка ввода откр.текста';

end;

 

end;

 

procedure TForm1.Button4Click(Sender: TObject);

var

 s,s1:string;

 k, i, j, len, x1, y1, x2, y2, c:integer;

begin

s:=memo2.Text;

len:=Length(s);

for i:=1 to len do

if (i mod 2 = 1) then

    begin

       for j:=0 to colk-1 do

          for c:=0 to rowk-1 do

            begin

              if s[i]=a[j,c] then

                begin

                  x1:=j;

                  y1:=c;

                end;

              if s[i+1]=a[j, c] then

                begin

                  x2:=j;

                  y2:=c;

                end;

            end;

          if (x1=x2) then

            begin

              if y1=0 then s[i]:=a[x1,rowk-1]

               else s[i]:=a[x1,y1-1];

              if y2=0 then s[i+1]:=a[x1,rowk-1]

               else s[i+1]:=a[x1,y2-1];

            end;

          if (y1=y2) then

            begin

              if x1=0 then s[i]:=a[colk-1,y1]

               else s[i]:=a[x1-1,y2];

              if x2=0 then s[i+1]:=a[colk-1,y1]

               else s[i+1]:=a[x2-1,y2];

            end;

          if (y1<>y2) and (x1<>x2) then

            begin

              s[i]:=a[x1,y2];

              s[i+1]:=a[x2,y1];

            end;

       

    end;

len:=Length(s);

For i:=1 to len do begin

if (s[i]='µ') then

begin

s1:='';

for j:=1 to i-1 do

  s1:=s1+s[j];

 

for j:=i+1 to len do

  s1:=s1+s[j];

s:=s1;

end; end;

len:=Length(s);

memo3.text:=s;

button6.Enabled:=true;

statusbar1.Panels[0].Text:='Текст расшифрован';

form1.Savedecrypt1.Enabled:=true;

end;

 

procedure TForm1.FormCreate(Sender: TObject);

begin

statusbar1.Panels[0].Text:='Введите текст для шифрования';

Memo1.Clear;

Memo2.Clear;

Memo3.Clear;

button3.Enabled:=false;

button4.Enabled:=false;

button5.Enabled:=false;

button6.Enabled:=false;

form1.Decrypt1.Enabled:=false;

form1.Savedecrypt1.Enabled:=false;

form1.Save1.Enabled:=false;

form1.Button1.Click;

end;

 

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

Finalize(a);

end;

 

procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);

var

fv:integer;

begin

fv:=updown1.Position;

if (fv=1) then

 begin

 form1.Width:=907;

 end;

if (fv=0) then

 begin

 form1.Width:=466;

 end;

 

end;

 

procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

statusbar1.Panels[2].Text:=inttostr(length(memo1.Text));

end;

 

procedure TForm1.Exit1Click(Sender: TObject);

begin

 close;

end;

 

procedure TForm1.Save1Click(Sender: TObject);

begin

if savedialog1.Execute then

 begin

Memo2.Lines.SaveToFile(savedialog1.FileName);

statusbar1.Panels[0].Text:='Зашифрованый текст сохранен';

 end;

end;

 

procedure TForm1.Savedecrypt1Click(Sender: TObject);

begin

if savedialog1.Execute then

begin

memo3.Lines.SaveToFile(savedialog1.FileName);

statusbar1.Panels[0].Text:='Расшифрованый текст сохранен';

end;

end;

 

procedure TForm1.Open1Click(Sender: TObject);

begin

if OpenDialog1.Execute then

begin

memo1.Lines.LoadFromFile(OpenDialog1.FileName);

statusbar1.Panels[0].Text:='Текст загружен';

end;

end;

 

procedure TForm1.Clear1Click(Sender: TObject);

begin

Button7.Click;

end;

 

procedure TForm1.Crypt1Click(Sender: TObject);

begin

Button3.Click;

end;

 

procedure TForm1.Decrypt1Click(Sender: TObject);

begin

Button4.Click;

end;

 

procedure TForm1.About2Click(Sender: TObject);

begin

form2.showmodal;

end;

 

end.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...