Листинг 12.15.
Функция пересчета алфавита преобразования
procedure TfmCryptography.RecalcAlphabet(nKey: Integer);
var
Ch: Char;
i: Integer;
LetCnt: Integer;
begin
//предварительно все символы в алфавите шифрования
//соответствуют символам из незашифрованного алфавита
for Ch := Low(RusDstAlphabet) to High(RusDstAlphabet) do
RusDstAlphabet[Ch] := Ch;
//количество символов в алфавите
LetCnt := SizeOf(TRusSrcAlphabet);
//смещаем эталонный алфавит циклически влево на значение,
//заданное ключом nKey
for i := 0 to LetCnt – 1 do
RusDstAlphabet[RusSrcAlphabet[(i – nKey + LetCnt)
mod LetCnt]] := RusSrcAlphabet[i];
end;
Процедура RecalcAlphabet производит необходимую подготовку перед шифрованием или дешифрованием. Результаты процедуры используются в функции EncryptDecryptString, где каждая буква открытого текста заменяется соответствующей ей буквой из смещенного алфавита. Это преобразование осуществляется простым проходом по всей строке и выполнением операции замены символа соответствующим ему. Стоит заметить, что для дешифровки сообщения по заданному ключу вычисляется симметричный ему ключ. В результате процесс дешифровки текста сообщения ничем не отличается от процесса его шифровки (листинг 12.16).