Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.04.2014, 04:00
Eremait Eremait вне форума
Прохожий
 
Регистрация: 10.04.2014
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
Вопрос Шифрование прямой заменой

Доброго времени суток. У меня есть проблема, надо сделать шифратор. Но проблема в том, что я изучал шифровку прямой замены, а нужно трехступенчатую прямую замены, и тут у меня небольшой затор. Если кто сталкивался помогите разъяснить, как это можно представить.

З.Ы. данные произвольны. Заранее благодарен
Ответить с цитированием
  #2  
Старый 10.04.2014, 06:27
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Гуглом пользоваться не пробовал?
http://ru.wikipedia.org/wiki/%D0%A8%...B2%D0%BA%D0%B8

Думаю это один из полиграмных или полиалфавитный шифров.
Ответить с цитированием
  #3  
Старый 13.04.2014, 21:44
Eremait Eremait вне форума
Прохожий
 
Регистрация: 10.04.2014
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо за наводку. Я с другом делал этот код, но увы у меня не получается сделать дальше 1 шага(каюсь в программировании я бум бум).

При создании цикла в цикле происходит ошибка. Будьте добры помогите.
Алгоритм
1)создание моноалфавитной(алфавит рандромен) замены с указание своих ключей
2)создание моноалфавитной замены с теме же ключами, но алфавит уже задан.
Вот код
Код:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TFrm = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button2: TButton;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Button3: TButton;
    Button4: TButton;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Edit3KeyPress(Sender: TObject; var Key: Char);
    procedure FormShow(Sender: TObject);
    procedure Edit4KeyPress(Sender: TObject; var Key: Char);
    procedure Edit5KeyPress(Sender: TObject; var Key: Char);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Massiv();
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private

  public

  end;

const
 n=32;

var
  Frm: TFrm;
  k1,k2,b: integer;
  mas1: array [1..n] of char = ('à','á','â','ã','ä','å','æ','ç','è','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','÷','ø','ù','ú','û','ü','ý','þ','ÿ','_');
  mas3: array [1..n] of char = ('ö','ó','ê','å','í','ã','ø','ù','ç','õ','ú','ô','û','â','à','ï','ð','î','ë','ä','æ','ý','ÿ','÷','ñ','_','ì','è','ò','ü','á','þ');
  mas2: array [1..n] of char;
implementation

{$R *.dfm}

procedure TFrm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Application.Terminate;
end;

procedure Control(var ch:char; var l:TEdit);
begin
case ch of
  '0'..'9':;
  #8:;
 else
  ch:=#0;
 end;
end;

procedure TFrm.Massiv();
var
 i,j,r,z:integer;
label
 gt;
begin
 j:=1;
 i:=j;
 z:=j;
 Randomize;
 while i<=n do
  begin
   label7.Caption:=label7.Caption + mas1[i];
   inc(i);
  end;
 while j<=n+1 do
  begin
gt:
   i:=random(n)+1;
    for r:=1 to j-1 do
     if mas2[r]<>mas1[i] then
      mas2[j]:=mas1[i]
     else goto gt;
   label9.Caption:=label9.Caption + mas2[j];
   inc(j);
  end;
end;

procedure TFrm.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
 if key=#13 then Edit4.SetFocus;
 Control(key, Edit3);
end;

procedure TFrm.FormShow(Sender: TObject);
begin
 Edit3.SetFocus;
 Massiv;
end;

procedure TFrm.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
 if key=#13 then Edit5.SetFocus;
 Control(key, Edit4);
end;

procedure TFrm.Edit5KeyPress(Sender: TObject; var Key: Char);
begin
 if key=#13 then Edit1.SetFocus;
 Control(key, Edit5);
end;

procedure TFrm.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 case key of
  'à'..'ÿ':;
  '¸':;
  '_':;
  #8:;
 else
  key:=#0;
 end;
  if key=#13 then Edit2.SetFocus;
end;


procedure TFrm.Button3Click(Sender: TObject);
begin
 Label7.Caption:='';
 Label9.Caption:='';
 Massiv;
end;


procedure TFrm.Button1Click(Sender: TObject);
label
 l;
var
 f,i,j,d:integer;
begin
 Edit2.Text:='';
try
 if (edit1.Text='') or (edit3.Text='') or (edit4.Text='') or (edit5.Text='') then
  begin
   ShowMessage('Çàïîëíèòå âñå ïîëÿ');
   exit;
  end;
 f:=0;

 if (StrToInt(Edit3.Text) mod 2 = 0) and (StrToInt(Edit4.Text) mod 2 = 0) then
 begin
  ShowMessage('Êîýôôèöèåíòû äîëæíû áûòü íå÷¸òíûìè!');
  Edit3.Text:='';
  Edit4.Text:='';
  Edit3.SetFocus;
  f:=1;
 end;

 if (StrToInt(Edit3.Text) mod 2 = 0) then
 begin
  ShowMessage('Êîýôôèöèåíòû äîëæíû áûòü íå÷¸òíûìè!');
  f:=2;
  Edit3.SetFocus;
  Edit3.Text:='';
 end;

 if (StrToInt(Edit4.Text) mod 2 = 0) then
 begin
  ShowMessage('Êîýôôèöèåíòû äîëæíû áûòü íå÷¸òíûìè!');
  f:=3;
  Edit4.SetFocus;
  Edit4.Text:='';
 end;

 if Edit5.Text = '' then
  begin
   ShowMessage('Ââåäèòå b!');
   Edit5.SetFocus;
  end;

 k1:=StrToInt(Edit3.Text);
 k2:=StrToInt(Edit4.Text);
 b:=StrToInt(Edit5.Text);

 for d:= 1 to Length(Edit1.Text) do
  begin
   for i:=1 to n do
    if Edit1.Text[d] = mas1[i] then
     begin
      j:=(k1*i+k2) mod n;
      if j=0 then j:=n;
      Edit2.Text:=Edit2.Text + mas2[j];
       for z:=1 to n do
        if Edit2.Text:=Edit2.Text + mas2[j] then
         begin
          j:=(k1*z*k2) mod n;
          if j=0 then j:=n;
          Edit2.Text:=Edit2.Text + mas3[j];
          end;
      if d mod b = 0 then
      Edit2.Text:=Edit2.Text + '_';
     end;
  end;

except
 on EConvertError do
  begin
   if (f=1) or (f=2) or (f=3) then
    exit;
   MessageDlg('Òàì ïóñòî!', mtWarning,[mbok],0);
    if Edit3.Text='' then
     Edit3.SetFocus;
    if Edit4.Text='' then
     Edit4.SetFocus;
    if (Edit3.Text='') and (Edit4.Text='') then
     Edit3.SetFocus;
  end;
end;
 Edit1.Text:='';
end;

procedure TFrm.Button4Click(Sender: TObject);
begin
 Edit1.Text:='';
 Edit2.Text:='';
end;

procedure TFrm.Button2Click(Sender: TObject);
var
 d,t,g,e,o:integer;
 st:string;
begin
 if (edit2.Text='') or (edit3.Text='') or (edit4.Text='') or (edit5.Text='') then
  begin
   ShowMessage('Çàïîëíèòå âñå ïîëÿ');
   exit;
  end;
 t:=0;
 st:=Edit2.Text;
for g:=1 to length(st) do
 if t=b then
  begin
   t:=1;
   delete (st, g ,1);
  end
  else
   t:=t+1;
 for d:=1 to length(st) do
  begin
   for o:=1 to n do
    begin
     e:=(k1*o+k2) mod n;
     if e=0 then e:=n;
     if st[d]=mas2[e] then
     Edit1.Text:=Edit1.Text+mas1[o];
    end;
  end;
end;

end.
Ответить с цитированием
  #4  
Старый 14.04.2014, 08:06
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Когда копируете код из среды и в нём есть русские символы, то переводите раскладку клавиатуры на русскую - abrakadabra отбивает начисто охоту вникать в вашу нетленку. Пжлст, перезалейте
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:15.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025