![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Доброго времени суток. У меня есть проблема, надо сделать шифратор. Но проблема в том, что я изучал шифровку прямой замены, а нужно трехступенчатую прямую замены, и тут у меня небольшой затор. Если кто сталкивался помогите разъяснить, как это можно представить.
![]() З.Ы. данные произвольны. Заранее благодарен |
#2
|
|||
|
|||
![]() Гуглом пользоваться не пробовал?
http://ru.wikipedia.org/wiki/%D0%A8%...B2%D0%BA%D0%B8 Думаю это один из полиграмных или полиалфавитный шифров. |
#3
|
|||
|
|||
![]() Спасибо за наводку. Я с другом делал этот код, но увы у меня не получается сделать дальше 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
|
||||
|
||||
![]() Когда копируете код из среды и в нём есть русские символы, то переводите раскладку клавиатуры на русскую - abrakadabra отбивает начисто охоту вникать в вашу нетленку. Пжлст, перезалейте
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |