Шифр Виженера
Длина блока шифра равна 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.