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

Листинг 12.13.

Объявление типов и класса нашей формы

type

//исходный алфавит русского языка

TRusSrcAlphabet = array [0..65] of Char;

//сопоставление букв алфавита открытого текста и зашифрованного

TRusDstAlphabet = array [Char] of Char;

TfmCryptography = class(TForm)

mmDecryptMessage: TMemo;

mmEncryptMessage: TMemo;

lbDecryptMessage: TLabel;

lbEncryptMessage: TLabel;

btnEncryptMessage: TButton;

btnDecpyptMessage: TButton;

edKey: TEdit;

lbKey: TLabel;

procedure btnEncryptMessageClick(Sender: TObject);

procedure btnDecpyptMessageClick(Sender: TObject);

private

{ Private declarations }

RusDstAlphabet: TRusDstAlphabet;

function GetKey: Integer;

procedure RecalcAlphabet(nKey: Integer);

function EncryptDecryptString(strMsg: String;

nKey: Integer): String;

public

{ Public declarations }

end;

var

RusSrcAlphabet: TRusSrcAlphabet =

\'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ\' +

\'абвгдеёжзийклмнопрстуфхцчшщъыьэюя\

fmCryptography: TfmCryptography;

Далее приведем описание работы методов, решающих определенные подзадачи, которые возникают в процессе решения основной проблемы. Итак, начнем рассмотрение с функции получения введенного пользователем ключа. Ее работа заключается в следующем. Сначала текстовое представление ключа преобразуется в численное представление. Далее проверяется, успешно ли прошло преобразование. Если все отлично, то возвращается полученное значение. В противном случае результатом функции будет -1, что свидетельствует о некорректном вводе пользователем ключа. Исходный код данной функции приведен в листинге 12.14.

...

Листинг 12.14.

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

function TfmCryptography.GetKey: Integer;

var

key, code: Integer;

begin

Result := –1;

//получаем текст элемента управления текстовая строка

Val(edKey.Text, key, code);

//ошибка во время преобразования к целому числу?

//или ключ имеет отрицательное значение?

if (code = 0) and (0 < key) then

Result := key;

end;

Процедура RecalcAlphabet имеет один параметр nKey, который принимает любое целое значение. Он показывает, на сколько требуется сдвинуть алфавит циклически вперед, то есть если имеется алфавит АБВГД, а пКеу=3, то результатом будет ВГДАБ. Первым делом алфавит соответствия заполняется один к одному, то есть каждый символ соответствует сам себе. После этого циклом проходимся по строке, содержащей весь необходимый алфавит, подлежащий сдвигу, и переназначаем соответствие этих букв смещенным. Как это делается, можно посмотреть в листинге 12.15.

...

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

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

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

102 способа хищения электроэнергии
102 способа хищения электроэнергии

Рассмотрена проблема хищений электроэнергии и снижения коммерческих потерь в электрических сетях потребителей. Приведены законодательно–правовые основы для привлечения к ответственности виновных в хищении электроэнергии. Изложены вопросы определения расчетных параметров средств учета электроэнергии, показаны схемы подключения счетчиков электрической энергии. Описаны расчетные и технологические способы хищения электроэнергии. Обсуждаются организационные и технические мероприятия по обнаружению, предотвращению и устранению хищений.Для работников энергоснабжающих организаций и инспекторского состава органов Ростехнадзора. Материалы книги могут быть использованы руководителями и специалистами энергослужб предприятий (организаций) для правильного определения расчетных параметров средств учета и потерь электроэнергии в электрических сетях.Если потенциальные расхитители электроэнергии надеются найти в книге «полезные советы», они должны отдавать себе отчет, что контролирующие структуры информированы в не меньшей степени и, следовательно, вооружены для эффективной борьбы с противоправной деятельностью.Настоящая книга является переработанным и дополненным изданием выпущенной в 2005 г. книги «101 способ хищения электроэнергии».

Валентин Викторович Красник

Технические науки / Образование и наука
100 великих чудес инженерной мысли
100 великих чудес инженерной мысли

За два последних столетия научно-технический прогресс совершил ошеломляющий рывок. На что ранее человечество затрачивало века, теперь уходят десятилетия или всего лишь годы. При таких темпах развития науки и техники сегодня удивить мир чем-то особенным очень трудно. Но в прежние времена появление нового творения инженерной мысли зачастую означало преодоление очередного рубежа, решение той или иной крайне актуальной задачи. Человечество «брало очередную высоту», и эта «высота» служила отправной точкой для новых свершений. Довольно много сооружений и изделий, даже утративших утилитарное значение, тем не менее остались в памяти людей как чудеса науки и техники. Новая книга серии «Популярная коллекция «100 великих» рассказывает о чудесах инженерной мысли разных стран и эпох: от изобретений и построек Древнего Востока и Античности до небоскребов в сегодняшних странах Юго-Восточной и Восточной Азии.

Андрей Юрьевич Низовский

История / Технические науки / Образование и наука
Электроника для начинающих (2-е издание)
Электроника для начинающих (2-е издание)

В ходе практических экспериментов рассмотрены основы электроники и показано, как проектировать, отлаживать и изготавливать электронные устройства в домашних условиях. Материал излагается последовательно от простого к сложному, начиная с простых опытов с электрическим током и заканчивая созданием сложных устройств с использованием транзисторов и микроконтроллеров. Описаны основные законы электроники, а также принципы функционирования различных электронных компонентов. Показано, как изготовить охранную сигнализацию, елочные огни, электронные украшения, устройство преобразования звука, кодовый замок и др. Приведены пошаговые инструкции и более 500 наглядных рисунков и фотографий. Во втором издании существенно переработан текст книги, в экспериментах используются более доступные электронные компоненты, добавлены новые проекты, в том числе с контроллером Arduino.

Чарльз Платт

Радиоэлектроника / Технические науки