Шифр Виженера

Длина блока шифра равна 4 символам. Ключ хранится в файле keyv.txt.

 

Текст программы (LR3.pas)

Program Shifrovka_Vigener;

uses crt;

type ftype = text;

const n=224;

var

fs,fe,fd,fk : ftype;

s,e,d,i,k,z,a : integer;

m,ch_in : char; str: string;

key : string;

begin

clrscr;

writeln (' Шифровка/Дешифровка методом Виженера ');

writeln ('1 - Шифровка');

writeln ('2 - Дешифровка');

writeln ('0 - Выход');

writeln;

writeln('Местоположение ключа - keyv.txt');

writeln;

 

assign(fk,'keyv.txt'); reset(fk);

while not eof(fk) do

begin

readln(fk,str); a:=a+length(str);

end;

 

if a<4 then begin

writeln('Длина ключа меньше 4 символов. Введите корректный ключ и перезапустите программу.');

writeln('Для выхода нажмите Enter');

readln;

exit;

end;

 

if a>4 then begin

writeln('Длина ключа больше 4 символов. Введите корректный ключ и перезапустите программу.');

writeln('Для выхода нажмите Enter');

readln;

exit;

end;

 

repeat

m:=readkey;

case m of

'1' :

begin

key:='';

assign (fs,'ishodn.txt'); reset(fs);

assign (fe,'zashifr3.txt'); rewrite(fe);

assign (fk,'keyv.txt');

reset(fk);

read(fk,key);

close(fk);

 

i:=1;

while not eof(fs) do

begin

repeat

read(fs,ch_in);

s:=ord(ch_in);

k:=ord(key[i mod 4]);

if s>=32 then e:=(s-32+k) mod n +32

else e:=s;

write(fe,chr(e));

inc(i);

until eof(fs);

end;

close(fs); close(fe);

writeln('Текст зашифрован');

end;

 

'2' :

begin

key:='';

assign (fe,'zashifr3.txt'); reset(fe);

assign (fd,'desh3.txt'); rewrite(fd);

assign (fk,'keyv.txt');

reset(fk);

readln(fk,key);

close(fk);

if length(key) < 4 then

begin

writeln('Key length is less then 4 chars.');

readln;

exit;

end;

i:=1;

while not eof(fe) do

begin

repeat

read(fe,ch_in);

e:=ord(ch_in);

k:=ord(key[i mod 4]);

if e>=32 then d:=((e-32+2*n-k) mod n) +32

else d:=e;

write(fd,chr(d));

inc(i);

until eof(fe);

end;

close(fe); close(fd);

writeln('Текст дешифрован');

end;

end;

until m='0';

end.