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

Листинг 12.26.

Обработчик события кнопки OnClick

procedure TfmHackEncrypting.btnHackEncryptingClick(Sender:

TObject);

var

Ch: Char;

i, j, h: Integer;

Delta, MinDelta: Real;

begin

//обнуляем счетчик русских букв в закодированном сообщении

nCount := 0;

FillChar(AbsFrequency, SizeOf(AbsFrequency), 0);

for i := 0 to mmEncryptMessage.Lines.Count – 1 do

for j := 1 to Length(mmEncryptMessage.Lines[i]) do

begin

//очередной символ сообщения

Ch := mmEncryptMessage.Lines[i][j];

//проверяем, принадлежит ли символ

//множеству русских букв

if Ch in RusLetters then

begin

//подсчитываем количество данной буквы в отдельности

//и в совокупности со всеми русскими буквами

AbsFrequency[UpCaseRus(Ch)] :=

AbsFrequency[UpCaseRus(Ch)] + 1;

Inc(nCount);

end;

end;

if nCount = 0 then

begin

MessageDlg(\'Дешифровать сообщение нельзя, так как\' +

\' отсутствует русский текст\', mtError, [mbOk], 0);

Exit;

end;

//вычисляем относительные частоты букв в закодированном

//сообщении

FillChar(RelFreqInMsg, SizeOf(RelFreqInMsg), 0);

for i := Low(RusSrcAlphabet) to High(RusSrcAlphabet) div 2 do

RelFreqInMsg[RusSrcAlphabet[i]] :=

AbsFrequency[RusSrcAlphabet[i]] / nCount;

//перебираем все возможные ключи и выбираем тот, при

//использовании которого частоты появления русских букв

//в закодированном сообщении наиболее близки к частотам

//появления русских букв в русском языке, то есть сумма

//абсолютных разностей частот букв должна быть наименьшей

h := High(RusSrcAlphabet) div 2 + 1;

MinDelta := h;

for i := 1 to h – 1 do

begin

Delta := 0;

for j := 0 to h – 1 do

Delta := Delta + Abs(RelFreqInLang[RusSrcAlphabet[j]] –

RelFreqInMsg[RusSrcAlphabet[(i + j + h) mod h]]);

//очередная сумма разностей меньше всех предыдущих?

if MinDelta > Delta then

begin

//запоминаем ее…

MinDelta := Delta;

//… и запоминаем ключ, при котором получено

//данное значение

nHackKey := i;

end;

end;

edKey.Text := IntToStr(nHackKey);

h := High(RusSrcAlphabet) + 1;

RecalcAlphabet(h – nHackKey mod h);

mmDecryptMessage.Lines.BeginUpdate;

mmDecryptMessage.Clear;

for i := 0 to mmEncryptMessage.Lines.Count – 1 do

mmDecryptMessage.Lines.Add(DecryptString(

mmEncryptMessage.Lines[i], nHackKey));

mmDecryptMessage.Lines.EndUpdate;

end;

Итог работы написанного приложения показан на рис. 12.9. Как видите, у нас все получилось!

Рис. 12.9. Результат работы приложения «Шифр Цезаря – взлом»

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

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

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных