Шифр Вижинера
Важное усовершенствование многоалфавитных систем, состоящее в идее использования в качестве ключа текста самого сообщения или же шифрованного текста, принадлежит Джероламо Кардано и Блезу де Виженеру. Такой шифр был назван самоключом.
Ниже приведены функции для работы с текстом по методу Вижинера (текст может состоять ТОЛЬКО из символов, присутствующих в алфавите):
const
TViginer: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
function ViginerEncipher(toCode, K: string): string;
var
i: integer;
currK: byte;
s: string;
begin
s := '';
for i := 1 to length(toCode) do begin
currK := pred(pos(K[ (pred(i) mod length(K)) + 1 ], TViginer));
s := s +
TViginer[ ((pred(pos(toCode[ i ], TViginer)) + currK) mod length(TViginer)) + 1 ];
end;
ViginerEncipher := s;
end;
function ViginerDecipher(toDecode, K: string): string;
var
i, T: integer;
currK: byte;
s: string;
begin
s := '';
for i := 1 to length(toDecode) do begin
currK := pred(pos(K[ (pred(i) mod length(K)) + 1 ], TViginer));
T := pred(pos(toDecode[ i ], TViginer)) - currK;
if T < 0 then inc(T, length(TViginer));
s := s + TViginer[T + 1];
end;
ViginerDecipher := s;
end;
var
s: string;
begin
s := ViginerEncipher('INFORMATION', 'BORED');
writeln(s);
writeln('s = ', ViginerDecipher(s, 'BORED'));
end.
Комментарии:
Нету комментариев для вывода...