Система шифрования Вижинера
.docСистема шифрования Вижинера
Шифрование происходит следующим образом:
-
Строится следующим образом таблица, состоящая из всего набора символов открытого текста, например (таблица 1):
procedure Tmn.FormCreate(Sender: TObject);
АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
БВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯА
ВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБ
ГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВ
ДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГ
ЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГД
ЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕ
ЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁ
ЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖ
ИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗ
ЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИ
КЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙ
ЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙК МНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛ
НОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМ
ОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМН
ПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНО
РСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОП
СТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОПР
ТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОПРС
УФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОПРСТ
ФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОПРСТУ
ХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОПРСТУФ
ЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОПРСТУФХ
ЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦ
ШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧ
ЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШ
ЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩ
ЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪ
ЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫ
ЭЮЯАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬ
ЮЯАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭ
ЯАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮ
Таблица 1
-
Выбирается ключ, не содержащий повторяющихся символов. Например, «вилка».
procedure Tmn.Button1Click(Sender: TObject);
-
Берется искомый текст, например «завтра встретимся у моста», и под текст подставляется ключ следующим образом:
завтра встретимся у моста (1)
вилкав илкавилкав и лкави (2)
После этого символы шифротекста берутся на пересечении строки, начинающейся на символ из (2) и столбца, начинающегося на соответствующий символ из (1).
После этого получим шифротекст: «йинэрв кээруыфчсб ь шщсфи».
Таким образом, повторяющиеся символы открытого текста не переходят в повторяющиеся символы шифротекста.
Дешифрование происходит следующим образом:
procedure Tmn.Button2Click(Sender: TObject);
-
под шифротекст подставляется ключ:
йинэрв кээруыфчсб ь шщсфи (3)
вилкав илкавилкав и лкави (4)
2. В таблице 1 ищется строка, начинающаяся на символ из (4), в строке ищется символ из (3), соответствующий символу из (4). Движемся вверх по таблице на первую строку, и находим там соответствующий символ.
procedure Tmn.FormCreate(Sender: TObject);
var i,j:integer;
al,r:string;
tmp:char;
begin
al:=' абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
for i:=1 to 34 do
alph[1,i]:=al[i];
for i:=1 to 33 do
begin
r:='';
tmp:=alph[i,1];
for j:=1 to 33 do
begin
alph[i+1,j]:=alph[i,j+1];
r:=r+alph[i,j+1];
end;
alph[i+1,34]:=tmp;
end;
end;
procedure Tmn.Button1Click(Sender: TObject);
var
enst,lozst:string;
lozst1:string;
rezst:string;
i,j,k:integer;
fn,sn:integer;
begin
enst:=ansilowercase(str.Text);
lozst:=ansilowercase(loz.Text);
j:=1;
lozst1:='';
if length(enst)>length(lozst) then
begin
for i:=1 to length(enst) do
begin
if j>length(lozst) then j:=1;
lozst1:=lozst1+lozst[j];
j:=j+1;
end;
end;
rezst:='';
for k:=1 to length(enst) do
begin
for i:=1 to 34 do
if alph[i,1]=enst[k] then fn:=i;
for j:=1 to 34 do
if alph[1,j]=lozst1[k] then sn:=j;
rezst:=rezst+alph[fn,sn];
end;
edit1.Text:=rezst;
end;
procedure Tmn.Button2Click(Sender: TObject);
var
enst,lozst:string;
lozst1:string;
rezst:string;
i,j,k:integer;
fn,sn:integer;
begin
enst:=ansilowercase(edit3.Text);
lozst:=ansilowercase(edit2.Text);
j:=1;
lozst1:='';
if length(enst)>length(lozst) then
begin
for i:=1 to length(enst) do
begin
if j>length(lozst) then j:=1;
lozst1:=lozst1+lozst[j];
j:=j+1;
end;
end;
rezst:='';
for k:=1 to length(lozst1) do
begin
fn:=0;
sn:=0;
for i:=1 to 34 do
if alph[i,1]=lozst1[k] then fn:=i;
for j:=1 to 34 do
if alph[fn,j]=enst[k] then sn:=j;
rezst:=rezst+alph[1,sn];
end;
edit4.Text:=rezst;
end;