Листинг 12.17.
Шифрование/дешифрование текста сообщения
procedure TfmCryptography.btnEncryptMessageClick(Sender: TObject);
var
i: Integer;
nKey: Integer;
begin
//получаем ключ, с помощью которого будет
//шифроваться сообщение
nKey := GetKey;
//ключ задан верно?
if nKey = –1 then
Begin
MessageDlg(\'Ошибка: ключ задан неверно\', mtError, [mbOk], 0);
Exit;
End;
//получаем алфавит, с помощью которого будет
//происходить шифрование
RecalcAlphabet(nKey);
//предотвращаем перерисовку компонента до тех пор, пока не
//зашифруем все строки сообщения
mmEncryptMessage.Lines.BeginUpdate;
//освобождаем список от любых старых значений
mmEncryptMessage.Clear;
//шифруем сообщение построчно
for i := 0 to mmDecryptMessage.Lines.Count – 1 do
mmEncryptMessage.Lines.Add(
EncryptDecryptString(mmDecryptMessage.Lines[i], nKey));
//заново разрешаем перерисовку компонента
mmEncryptMessage.Lines.EndUpdate;
end;
procedure TfmCryptography.btnDecpyptMessageClick(Sender: TObject);
var
i: Integer;
nKey: Integer;
begin
nKey := GetKey;
if nKey = –1 then
Begin
MessageDlg(\'Ошибка: ключ задан неверно\', mtError, [mbOk], 0);
Exit;
End;
//получаем алфавит, с помощью которого будет происходить
//дешифрование
RecalcAlphabet(SizeOf(TRusSrcAlphabet) – nKey
mod SizeOf(TRusSrcAlphabet));
mmDecryptMessage.Lines.BeginUpdate;
mmDecryptMessage.Clear;
for i := 0 to mmEncryptMessage.Lines.Count – 1 do
mmDecryptMessage.Lines.Add(
EncryptDecryptString(mmEncryptMessage.Lines[i], nKey));
mmDecryptMessage.Lines.EndUpdate;
end;
Первое, что бросается в глаза при рассмотрении всего текста приложения, это практически полная идентичность интерфейса и основной части исходного кода. На самом деле это совсем не случайно. Достаточно часто программы пишутся универсально (даже более универсально, чем здесь!). Это основывается на очень простом предположении, что код должен быть многоразовым, то есть его можно повторно использовать в других приложениях. В результате у вас получается некий шаблон, который позволяет решать целый класс задач. Для этого нужно выполнить несколько маленьких изменений и потом просто можно забыть об этом. Результат выполнения итогового приложения можно увидеть на рис. 12.6.
Рис. 12.6. Результат работы приложения «Шифр Цезаря»