Автор работы: Пользователь скрыл имя, 06 Февраля 2011 в 16:35, лабораторная работа
. Цель работы:
Изучение симметричных алгоритмов
1.1 Порядок выполнения:
1. Изучить основы шифрования данных методом в соответствии с предложенным вариантом.
2. В соответствии с индивидуальным заданием определить функцию шифрования, разработать алгоритм и написать программу, обеспечивающую ввод произвольного открытого текста и выдачу шифрограммы, полученную изучаемым методом, а также расшифрованию – получение открытого текста из шифрограммы.
Memo1.SetFocus;
button4.Enabled:=false;
button5.Enabled:=false;
button6.Enabled:=false;
statusbar1.Panels[2].Text:=
statusbar1.Panels[0].Text:='
form1.Decrypt1.Enabled:=false;
form1.Savedecrypt1.Enabled:=
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(
statusbar1.Panels[0].Text:='
end;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
if savedialog1.Execute then
begin
memo3.Lines.SaveToFile(
statusbar1.Panels[0].Text:='
end;
end;
//заполняем матрицу символами
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,k:integer;
begin
k:=1;
colk:=form1.StringGrid1.
rowk:=stringgrid1.RowCount;
setlength(a,colk,rowk);
alf:=#039+'
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:=
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:=
form1.Savedecrypt1.Enabled:=
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:=
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Save1Click(Sender: TObject);
begin
if savedialog1.Execute then
begin
Memo2.Lines.SaveToFile(
statusbar1.Panels[0].Text:='
end;
end;
procedure TForm1.Savedecrypt1Click(
begin
if savedialog1.Execute then
begin
memo3.Lines.SaveToFile(
statusbar1.Panels[0].Text:='
end;
end;
procedure TForm1.Open1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
memo1.Lines.LoadFromFile(
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);
Информация о работе Изучение симметричных алгоритмов шифрования