...

Листинг 12.12. Шифрование/дешифрование текста сообщения

procedure TfmTransposition.btnEncryptMessageClick (Sender:

TObject);

begin

EncryptDecrypt(mmDecryptMessage.Lines,

mmEncryptMessage.Lines, 0);

end;

procedure TfmTransposition.btnDecpyptMessageClick(Sender:

TObject);

begin

EncryptDecrypt(mmEncryptMessage.Lines,

mmDecryptMessage.Lines, 1);

end;

procedure TfmTransposition.EncryptDecrypt(SrcLines,

DstLines: TStrings;

nKey: Integer);

var

i, j, Cnt: Integer;

s, EncryptMsg: String;

begin

if RecalcRearrangement(nKey) then

begin

//вычисляем общую длину текста

Cnt := 0;

for i := 0 to SrcLines.Count – 1 do

Inc(Cnt, Length(SrcLines[i]));

//проверяем кратность общей длины длине перестановки

if Cnt mod Rear[0] <> 0 then

begin

MessageDlg(\'Ошибка: текст сообщения не кратен длине

перестановки\', mtError, [mbOk], 0);

Exit;

end;

//преобразуем сообщение

Cnt := Rear[0];

DstLines.BeginUpdate;

DstLines.Clear;

for i := 0 to SrcLines.Count – 1 do

begin

EncryptMsg := \'\

for j := 1 to Length(SrcLines[i]) do

begin

if Cnt = Rear[0] then

begin

s := GetLine(SrcLines, i, j);

Cnt := 0;

end;

Inc(Cnt);

EncryptMsg := EncryptMsg + s[Rear[Cnt]];

end;

DstLines.Add(EncryptMsg);

end;

DstLines.EndUpdate;

end

else

MessageDlg(\'Ошибка: перестановка задана неверно\', mtError,

[mbOk], 0);

end;

С подготовительным этапом мы разобрались, а теперь рассмотрим непосредственно сам процесс преобразования текста сообщения. Здесь переменная Cnt отвечает за то, какую часть очередной группы букв уже обработали. Если она равна количеству чисел в перестановке, то происходит переход к очередной группе букв сообщения. Алгоритм преобразования усложняется тем, что строки текста не обязательно кратны количеству чисел в перестановке. Поэтому для удобства мы написали функцию GetLine, получающую часть сообщения с указанной позиции в виде одной строки определенной длины, которая при необходимости склеена из нескольких подряд идущих строк. Теперь нам ничего не мешает заменить очередную букву сообщения соответствующей буквой из полученной строки. Результат работы приложения приведен на рис. 12.4.

Рис. 12.4. Результат работы приложения «Т ранспозиция с фиксированным периодом»

Загрузка...