Смекни!
smekni.com

Изучение симметричных алгоритмов шифрования (стр. 2 из 2)

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абвгдеёжзийклмнопрстуфхцчшщъыьэюя !@#№$;%^:&?*()-_+=[]/&bsol;{}<>.,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.

5. Работа программы биграммного шифрования Плейфера

Разработанная программа обладает интерактивным интерфейсом. Методы и средства взаимодействия с аппаратными и программными средствами называют пользовательским интерфейсом. Разработанная программа обладает интерфейсом приведенным на рисунке 2

Рис. 2. Интерфейс системы биграммного шифрования Плейфера

Зашифруем исходное сообщение «Первоисточник» для этого введем это сообщение в программе, в окошке «Введите открытый текст». После чего нажмем кнопку «Зашифровать». И увидим, что во втором окошке «Зашифрованный текст» увидим результат шифрования.
Результат шифрования приведен ниже на рисунке 3.

Рис. 3. Результат шифрования текста

Также можно выполнить расшифрование текста, нажав на кнопку «Расшифровать» (рис. 4).

Рис. 4. Результат расшифрования текста

При необходимости можно сохранить зашифрованные данные нажав кнопку «Сохранить файл». И при помощи кнопки «Выход» происходит закрытие программы.

6. Выводы по работе

Испокон веков не было ценности большей, чем информация. ХХ век - век информатики и информатизации. Технология дает возможность передавать и хранить все большие объемы информации. Это благо имеет и оборотную сторону. Информация становится все более уязвимой по разным причинам:

· возрастающие объемы хранимых и передаваемых данных;

· расширение круга пользователей, имеющих доступ к ресурсам ЭВМ, программам и данным;

· усложнение режимов эксплуатации вычислительных систем.

Поэтому все большую важность приобретает проблема защиты информации от несанкционированного доступа (НСД) при передаче и хранении.

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