program main;
const n=65;
type A=array[0..n] of char;
const alpha:A=('А','Б','В','Г','Д','Е','Ё','Ж','З','И',
'Й', 'К','Л','М','Н','О','П','Р','С','Т',
'У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь',
'Э','Ю','Я', 'а','б','в','г','д','е','ё',
'ж','з','и','й','к','л','м','н','о','п',
'р','с','т','у','ф','х','ц','ч','ш','щ',
'ъ','ы', 'ь','э','ю','я');
{Поиск индекса символа в алфавите}
function indexOf(c:char; arr:A):integer;
var i:integer;
index:integer;
begin
for i:=1 to n do
if (c=arr[i]) then
index:=i;
indexOf:=index;
end;
{Поиск наибольшего общего делителя}
function gcd(a,b:integer):integer;
begin
while(a>0) and (b>0) do
begin
if a>b then
a:=a mod b
else
b:=b mod a;
end;
gcd:=a+b;
end;
{Поиск обратного элемента в кольце по mod n}
function reversed(m:integer):integer;
var r:integer;
i:integer;
begin
m:=m mod n;
r:=-1;
for i:=1 to n do
if((i*m) mod n = 1) then
begin
r:=i;
break;
end;
reversed:=r;
end;
{Шифрование и дешифрование применяет стандартные формулы
аффинного шифра}
function encrypt(txt:string; m,k:integer):string;
var i:integer;
c:char;
index:integer;
begin
m:=m mod n;
k:=k mod n;
if (gcd(m,n)<>1) then
begin
encrypt:='для однозначного шифрования m должен быть взаимно прост с n';
exit;
end;
for i:=1 to length(txt) do
begin
c:=txt[i];
index:=indexOf(c,alpha);
index:=(m*index+k) mod n;
txt[i]:=alpha[index];
end;
encrypt:=txt;
end;
function decrypt(txt:string; m,k:integer):string;
var i:integer;
c:char;
index:integer;
reversed_m:integer;
begin
k:=k mod n;
reversed_m:=reversed(m);
for i:=1 to length(txt) do
begin
c:=txt[i];
index:=indexOf(c,alpha);
index:=(reversed_m*(index-k) mod n);
txt[i]:=alpha[index];
end;
decrypt:=txt;
end;
var m:integer;
k:integer;
txt:string;
begin
txt:='Шуршалка';
{Параметры ключа (m,k)}
m:=11;
k:=4;
writeln('Шифрование');
writeln('***>',encrypt(txt,m,k));
writeln('Дешифрование');
writeln('***>',decrypt(txt,m,k));
end.
ICAgIHByb2dyYW0gbWFpbjsKICBjb25zdCBuPTY1OwogIHR5cGUgQT1hcnJheVswLi5uXSBvZiBjaGFyOwogIGNvbnN0IGFscGhhOkE9KCfQkCcsJ9CRJywn0JInLCfQkycsJ9CUJywn0JUnLCfQgScsJ9CWJywn0JcnLCfQmCcsCiAgICAgICAgICAgICAgICAgJ9CZJywgJ9CaJywn0JsnLCfQnCcsJ9CdJywn0J4nLCfQnycsJ9CgJywn0KEnLCfQoicsCiAgICAgICAgICAgICAgICAgJ9CjJywn0KQnLCfQpScsJ9CmJywn0KcnLCfQqCcsJ9CpJywn0KonLCfQqycsJ9CsJywKICAgICAgICAgICAgICAgICAn0K0nLCfQricsJ9CvJywgJ9CwJywn0LEnLCfQsicsJ9CzJywn0LQnLCfQtScsJ9GRJywKICAgICAgICAgICAgICAgICAn0LYnLCfQtycsJ9C4Jywn0LknLCfQuicsJ9C7Jywn0LwnLCfQvScsJ9C+Jywn0L8nLAogICAgICAgICAgICAgICAgICfRgCcsJ9GBJywn0YInLCfRgycsJ9GEJywn0YUnLCfRhicsJ9GHJywn0YgnLCfRiScsCiAgICAgICAgICAgICAgICAgJ9GKJywn0YsnLCAn0YwnLCfRjScsJ9GOJywn0Y8nKTsKICAKICB70J/QvtC40YHQuiDQuNC90LTQtdC60YHQsCDRgdC40LzQstC+0LvQsCDQsiDQsNC70YTQsNCy0LjRgtC1fQogIGZ1bmN0aW9uIGluZGV4T2YoYzpjaGFyOyBhcnI6QSk6aW50ZWdlcjsKICB2YXIgaTppbnRlZ2VyOwogICAgICBpbmRleDppbnRlZ2VyOwogIGJlZ2luCiAgICBmb3IgaTo9MSB0byBuIGRvCiAgICAgIGlmIChjPWFycltpXSkgdGhlbiAKICAgICAgICBpbmRleDo9aTsKICAgIGluZGV4T2Y6PWluZGV4OwogIGVuZDsKICAKICB70J/QvtC40YHQuiDQvdCw0LjQsdC+0LvRjNGI0LXQs9C+INC+0LHRidC10LPQviDQtNC10LvQuNGC0LXQu9GPfQogIGZ1bmN0aW9uIGdjZChhLGI6aW50ZWdlcik6aW50ZWdlcjsKICBiZWdpbgogICAgd2hpbGUoYT4wKSBhbmQgKGI+MCkgZG8KICAgICAgYmVnaW4KICAgICAgICBpZiBhPmIgdGhlbgogICAgICAgICAgYTo9YSBtb2QgYgogICAgICAgIGVsc2UKICAgICAgICAgIGI6PWIgbW9kIGE7CiAgICAgIGVuZDsKICAgIGdjZDo9YStiOwogIGVuZDsKICB70J/QvtC40YHQuiDQvtCx0YDQsNGC0L3QvtCz0L4g0Y3Qu9C10LzQtdC90YLQsCDQsiDQutC+0LvRjNGG0LUg0L/QviBtb2Qgbn0KICBmdW5jdGlvbiByZXZlcnNlZChtOmludGVnZXIpOmludGVnZXI7CiAgdmFyIHI6aW50ZWdlcjsKICAgICAgaTppbnRlZ2VyOwogIGJlZ2luCiAgICBtOj1tIG1vZCBuOwogICAgcjo9LTE7CiAgICBmb3IgaTo9MSB0byBuIGRvCiAgICAgIGlmKChpKm0pIG1vZCBuID0gMSkgdGhlbgogICAgICAgIGJlZ2luCiAgICAgICAgICByOj1pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZW5kOwogICAgcmV2ZXJzZWQ6PXI7CiAgZW5kOwogIAogIHvQqNC40YTRgNC+0LLQsNC90LjQtSDQuCDQtNC10YjQuNGE0YDQvtCy0LDQvdC40LUg0L/RgNC40LzQtdC90Y/QtdGCINGB0YLQsNC90LTQsNGA0YLQvdGL0LUg0YTQvtGA0LzRg9C70YsKICAg0LDRhNGE0LjQvdC90L7Qs9C+INGI0LjRhNGA0LB9CiAgZnVuY3Rpb24gZW5jcnlwdCh0eHQ6c3RyaW5nOyBtLGs6aW50ZWdlcik6c3RyaW5nOwogIHZhciBpOmludGVnZXI7CiAgICAgIGM6Y2hhcjsKICAgICAgaW5kZXg6aW50ZWdlcjsKICBiZWdpbgogICAgbTo9bSBtb2QgbjsKICAgIGs6PWsgbW9kIG47CiAgICBpZiAoZ2NkKG0sbik8PjEpIHRoZW4KICAgICAgYmVnaW4KICAgICAgICBlbmNyeXB0Oj0n0LTQu9GPINC+0LTQvdC+0LfQvdCw0YfQvdC+0LPQviDRiNC40YTRgNC+0LLQsNC90LjRjyBtINC00L7Qu9C20LXQvSDQsdGL0YLRjCDQstC30LDQuNC80L3QviDQv9GA0L7RgdGCINGBIG4nOwogICAgICAgIGV4aXQ7CiAgICAgIGVuZDsKICAgIGZvciBpOj0xIHRvIGxlbmd0aCh0eHQpIGRvCiAgICAgIGJlZ2luCiAgICAgICAgYzo9dHh0W2ldOwogICAgICAgIGluZGV4Oj1pbmRleE9mKGMsYWxwaGEpOwogICAgICAgIGluZGV4Oj0obSppbmRleCtrKSBtb2QgbjsKICAgICAgICB0eHRbaV06PWFscGhhW2luZGV4XTsKICAgICAgZW5kOwogICAgZW5jcnlwdDo9dHh0OwogIGVuZDsKICAKICBmdW5jdGlvbiBkZWNyeXB0KHR4dDpzdHJpbmc7IG0sazppbnRlZ2VyKTpzdHJpbmc7CiAgdmFyIGk6aW50ZWdlcjsKICAgICAgYzpjaGFyOwogICAgICBpbmRleDppbnRlZ2VyOwogICAgICByZXZlcnNlZF9tOmludGVnZXI7CiAgYmVnaW4KICAgIGs6PWsgbW9kIG47CiAgICByZXZlcnNlZF9tOj1yZXZlcnNlZChtKTsKICAgIGZvciBpOj0xIHRvIGxlbmd0aCh0eHQpIGRvCiAgICAgIGJlZ2luCiAgICAgICAgYzo9dHh0W2ldOwogICAgICAgIGluZGV4Oj1pbmRleE9mKGMsYWxwaGEpOwogICAgICAgIGluZGV4Oj0ocmV2ZXJzZWRfbSooaW5kZXgtaykgbW9kIG4pOwogICAgICAgIHR4dFtpXTo9YWxwaGFbaW5kZXhdOwogICAgICBlbmQ7CiAgICBkZWNyeXB0Oj10eHQ7CiAgZW5kOwogIHZhciBtOmludGVnZXI7CiAgICAgIGs6aW50ZWdlcjsKICAgICAgdHh0OnN0cmluZzsKICBiZWdpbgogICAgdHh0Oj0n0KjRg9GA0YjQsNC70LrQsCc7CiAgICB70J/QsNGA0LDQvNC10YLRgNGLINC60LvRjtGH0LAgKG0sayl9CiAgICBtOj0xMTsKICAgIGs6PTQ7CiAgICB3cml0ZWxuKCfQqNC40YTRgNC+0LLQsNC90LjQtScpOwogICAgd3JpdGVsbignKioqPicsZW5jcnlwdCh0eHQsbSxrKSk7CiAgICB3cml0ZWxuKCfQlNC10YjQuNGE0YDQvtCy0LDQvdC40LUnKTsKICAgIHdyaXRlbG4oJyoqKj4nLGRlY3J5cHQodHh0LG0saykpOwogIGVuZC4=
Free Pascal Compiler version 2.2.0 [2009/11/16] for i386
Copyright (c) 1993-2007 by Florian Klaempfl
Target OS: Linux for i386
Compiling prog.pas
prog.pas(4,22) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(4,27) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(4,32) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(4,37) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(4,42) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(4,47) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(4,52) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(4,57) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(4,62) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(4,67) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(5,22) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(5,28) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(5,33) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(5,38) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(5,43) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(5,48) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(5,53) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(5,58) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(5,63) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(5,68) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(6,22) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(6,27) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(6,32) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(6,37) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(6,42) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(6,47) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(6,52) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(6,57) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(6,62) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(6,67) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(7,22) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(7,27) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(7,32) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(7,38) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(7,43) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(7,48) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(7,53) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(7,58) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(7,63) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(7,68) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(8,22) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(8,27) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(8,32) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(8,37) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(8,42) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(8,47) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(8,52) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(8,57) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(8,62) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(8,67) Error: Incompatible types: got "Constant String" expected "Char"
prog.pas(8,67) Fatal: There were 50 errors compiling module, stopping
Fatal: Compilation aborted
Error: /usr/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)