Шифрование методом Льюиса, Шифрование методом Атбаш, Шифрование методом Цезаря, Квадрат Полибия, Шифр Вижинера, Шифр Гронсфельда, Шифрование с помощью решетки, Шифр Хилла (с длиной блока = 2),
{ Процедура поворота матрицы } procedure T(var res: matrix); var i, j: integer; mx: matrix; begin mx := res; for i := 1 to n do for j := 1 to n do res[j, n - i + 1] := mx[i, j]; end;
{ Зашифровка текста } procedure EncodeText(const s: string; const mask: matrix; var mx: matrix); var i, j, count: integer; masked: matrix; begin { Заполнение матрицы mx строками по N пробелов } for i := 1 to n do for j := 1 to n do mx[i] := mx[i] + #32;
masked := mask; count := 1; while count <= length(s) do begin
for i := 1 to n do for j := 1 to n do if masked[i, j] = 'x' then begin mx[i][j] := s[count]; inc(count) end; T(masked);
end; end;
{ Расшифровка текста } function DecodeText(const mask, encoded: matrix): string; var s: string; i, j, count: integer; masked: matrix; begin
masked := mask; count := 0; s := ''; while length(s) < n*n do begin for i := 1 to n do for j := 1 to n do if masked[i, j] = 'x' then s := s + encoded[i, j]; T(masked); end; DecodeText := s;
end; var i: integer; begin
EncodeText(st, mask, encoded);
writeln('encoded text: '); for i := 1 to n do begin writeln(encoded[i]); end;