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

Автор работы: Пользователь скрыл имя, 06 Февраля 2011 в 16:35, лабораторная работа

Описание работы

. Цель работы:

Изучение симметричных алгоритмов

1.1 Порядок выполнения:

1. Изучить основы шифрования данных методом в соответствии с предложенным вариантом.

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

Файлы: 1 файл

Работа 3 Удалова.doc

— 412.50 Кб (Скачать файл)

    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);

Информация о работе Изучение симметричных алгоритмов шифрования