Листинг 12.20.
Функция шифрования строки с помощью ключа и криптограммы
function TfmEncryptingAutoKey.EncryptString(strEncryptMsg: String;
var strKey: String): String;
var
i: Integer;
begin
for i := 1 to Length(strEncryptMsg) do
if strEncryptMsg[i] in RusLetters then
begin
strEncryptMsg[i] := Chr(((Ord(strEncryptMsg[i]) –
Ord(\'А\')) + (Ord(strKey[1]) – Ord(\'А\'))) mod 64 + Ord(\'А\'));
Delete(strKey, 1, 1);
strKey := strKey + strEncryptMsg[i];
end;
Result := strEncryptMsg;
end;
Функция дешифрования строки с помощью ключа и криптограммы делает следующее. Как и в предыдущей функции, в цикле осуществляется проход по строке и проверяется, является ли очередной символ буквой русского алфавита. При положительном ответе данный символ сначала добавляется в конец ключа, а потом только осуществляется его преобразование. Обратное преобразование символа проходит по следующему правилу: li = xi – yi (mod m), то есть из символа преобразованного текста вычитается символ ключа с последующим сокращением этой разности по модулю т, где т – общее количество букв в алфавите. Если результат отрицателен, то происходит дополнение до положительного числа значением т. Как это реализовано, показано в листинге 12.21.