Шифр замены (код Цезаря) Занумеровать алфавит исходного сообщения. Пусть m -длина алфавита сообщения; n,k — целые числа и НОД(n,m)=1; A,B — коды букв исходного сообщения и шифра соответственно. Тогда B=(A*n+k) mod m и A=(B-k)*n^(-1) mod m . Реализовать кодирование/декодирование. — Pascal(Паскаль)

var ALPH_ENG,message,code,decode:string;
   n,k,i,buff:integer;

function nod(x,y:integer):integer;
begin
if (y=0) then nod:=x else
 nod:=nod(y,(x mod y));
end;
begin
ALPH_ENG:='abcdefghijklmnopqrstuvwxyz';
write('Enter your message:');
readln(message);
write('Enter k:');
readln(k);
repeat
  write('Enter n:');
  readln(n);
  writeln('nod=',nod(n,26)) ;
until( nod(n,26)=1);
for i:=1 to length(message) do code:=code+ALPH_ENG[((Ord(message[i])-96)*n +k) mod 26];
writeln('code=',code);

for i:=1 to length(code) do
  begin
  buff:=Ord(code[i])-96-k;
  if (buff < 0) then buff:=buff+26;
  while (buff mod n >0) do buff:= 26+buff;
  buff:=buff div n;
  decode:=decode+ALPH_ENG[(buff) mod 26];
end;

writeln('decode=',decode); 

readln;
end.

Leave a Comment

+ 54 = 55