Помогите с виженером
Пусть исходный алфавит состоит из следующих знаков (символ "_" (подчеркивание) будем использовать для пробела):
АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ_
Расшифруйте сообщения, зашифрованные с помощью шифра Вижинера и ключа ОРЕХ:
ШВМБУЖНЯ
ЯБХЪШЮМХ
Если можно, то с объяснением ответьте пожалуйста :)
на первое ответ КУЗНЕЧИК
вот код на делфи, думаю разберешься.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const w='АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ_';
e='ШВМБУЖНЯ';
n='ЯБХЪШЮМХ';
var
Form1: TForm1;
key: string='ОРЕХ';
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var i,j,k,g: integer; c: char; s,u: string;
a2:integer;
begin
s:=''; u:='';
for i:=1 to length(e) do
begin
g:=1+((i-1)mod length(key));// индекс буквы ключа
c:=key[g];
s:=s+c;
k:=pos(c,w);
j:=pos(e[i],w);
a2:=length(w);
u:=u+w[1+((j-1)-(k-1)+a2*2)mod a2];
end;
showmessage(pchar(s)+#10#13+u);
end;
end.