![]() |
|
#2
|
||||
|
||||
![]() Пример реализации
Код:
//Шифр Цезаря реализует кодирование фразы путем «сдвига» всех букв фразы на //определенное число k (в оригинальном шифре Цезаря число k равнялось 3). //Алфавит считается циклическим (...эюяавб...эюяабв...). //Шифрование Цезаря function Cesar_Crypt(s:string):string; const SizeA = 33; //Размер алфавита RusA = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'; //Алфавит var i, P :integer; temp:string; begin s:=AnsiLowerCase(s); temp:=''; //удаление символов сообщения, не входящих в наш алфавит for i := 1 to length(s) do if pos(s[i],RusA)<>0 then temp:=temp+s[i]; s:=temp; for i:=1 to length(s) do begin P:=pos(s[i],RusA)+3; if P>SizeA then P:=P-SizeA; Result:=Result+RusA[P]; end; end; //Дешифрование Цезаря function Cesar_DeCrypt(s:string):string; const SizeA = 33; //Размер алфавита RusA = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'; //Алфавит var i, P :integer; temp:string; begin s:=AnsiLowerCase(s); temp:=''; //удаление символов сообщения, не входящих в наш алфавит for i := 1 to length(s) do if pos(s[i],RusA)<>0 then temp:=temp+s[i]; s:=temp; for i:=1 to length(s) do begin P:=pos(s[i],RusA)-3; if P<=0 then P:=P+SizeA; Result:=Result+RusA[P]; end; end; //Шифрование Виженера function Viz_Crypt(s,key:string):string; const SizeA = 33; //Размер алфавита RusA = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'; //Алфавит var i, P, t :integer; begin s:=AnsiLowerCase(s); key:=AnsiLowerCase(key); t:=0; for i:=1 to length(s) do begin inc(t); if t>length(key) then t:=1; P:=pos(s[i],RusA)+pos(key[t],RusA); if P>SizeA then P:=P-SizeA; Result:=Result+RusA[P]; end; end; //Дешифрование Виженера function Viz_DeCrypt(s,key:string):string; const SizeA = 33; //Размер алфавита RusA = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'; //Алфавит var i, P, t :integer; begin s:=AnsiLowerCase(s); key:=AnsiLowerCase(key); t:=0; for i:=1 to length(s) do begin inc(t); if t>length(key) then t:=1; P:=pos(s[i],RusA)-pos(key[t],RusA); if P<=0 then P:=P+SizeA; Result:=Result+RusA[P]; end; end; |