Читаем Delphi. Трюки и эффекты полностью

Листинг 12.19.

Функция получения ключа

function TfmEncryptingAutoKey.GetKey: String;

var

i: Integer;

begin

Result := \'\

for i := 1 to Length(edKey.Text) do

if not (edKey.Text[i] in RusLetters) then

Exit;

Result := edKey.Text;

end;

Рассмотрим работу функций EncryptString и DecryptString. На входе они получают строку, которую требуется преобразовать, и первичный ключ. Внешне они очень похожи, но все же отличаются, и эти отличия существенны. Функция шифрования выполняет следующие действия. В цикле осуществляется проход по строке и проверяется, является ли очередной символ буквой русского алфавита. В случае положительного ответа этот символ преобразуется при помощи очередного символа ключа и добавляется в его конец. Преобразование осуществляется по правилу, которое мы указывали при рассмотрении шифра Виженера: li =xi + yi (modm), то есть символ открытого текста и символ ключа складываются с последующим сокращением этой суммы по модулю т, где т – общее количество букв в алфавите (листинг 12.20).

...

Листинг 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.

...

Листинг 12.21.

Функция дешифрования строки с помощью ключа и криптограммы

function TfmEncryptingAutoKey.DecryptString(strDecryptMsg: String;

var strKey: String): String;

var

i: Integer;

begin

for i := 1 to Length(strDecryptMsg) do

if strDecryptMsg[i] in RusLetters then

begin

strKey := strKey + strDecryptMsg[i];

strDecryptMsg[i] := Chr((((Ord(strDecryptMsg[i]) –

Ord(\'А\')) – (Ord(strKey[1]) – Ord(\'А\'))) + 64) mod 64 +

Ord(\'А\'));

Delete(strKey, 1, 1);

end;

Result := strDecryptMsg;

end;

Обработчики событий OnClick вызывают функцию EncryptDecrypt с необходимыми параметрами. У этой функции всего три параметра. Первый указывает на источник текста сообщения, требующего преобразования, второй указывает на приемник преобразованного текста сообщения. Последний параметр определяет тип преобразования текста сообщения. Если он равен True, то текст сообщения шифруется и помещается в приемник. В противном случае текст сообщения дешифруется и также помещается в приемник. Это происходит следующим образом. Сначала получается ключ, при помощи которого будет осуществляться преобразование текста сообщения. Если ключ некорректен, то выдаем соответствующее предупреждение и больше ничего не делаем. Если ключ корректен, то в зависимости от последнего параметра вызываем соответствующую функцию преобразования для каждой строки источника текста сообщения и добавляем результат в приемник (листинг 12.22).

...

Перейти на страницу:

Похожие книги

Оружие современной пехоты. Иллюстрированный справочник Часть I
Оружие современной пехоты. Иллюстрированный справочник Часть I

В книге в популярной форме рассказано о современной системе вооружения пехоты, об истории и путях ее дальнейшего развития, а также об основах устройства оружия. Для более подробного рассмотрения автором отобраны самые распространенные образцы. Издание подготовлено для всех интересующихся историей военной техники и современным боевым оружием. Прим. OCR: Для популярного справочника очень доступно и одновременно подробно рассмотрены варианты оружейной автоматики, типы затворов и т.п. Достаточно, что бы не считать внешнее сходство оружия доказательство его копирования. Качество фотоматериалов к сожалению очень низкое – лучше скана в сети не нашлось.

Семен Леонидович Федосеев

Военное дело / Военная история / Справочники / Технические науки / Военная техника и вооружение / Образование и наука / Словари и Энциклопедии