39610

КОДИРОВАНИЕ ИНФОРМАЦИИ С ИСПОЛЬЗОВАНИЕМ ХАОТИЧЕСКИХ ПРОЦЕССОВ

Дипломная

Информатика, кибернетика и программирование

Криптография — прикладная наука, она использует самые последние достижения фундаментальных наук и, в первую очередь, математики. С другой стороны, все конкретные задачи криптографии существенно зависят от уровня развития техники и технологии, от применяемых средств связи и способов передачи информации.

Русский

2013-10-07

1.01 MB

65 чел.

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Кафедра интеллектуальных систем

ДИПЛОМНАЯ РАБОТА

КОДИРОВАНИЕ ИНФОРМАЦИИ С ИСПОЛЬЗОВАНИЕМ ХАОТИЧЕСКИХ ПРОЦЕССОВ

студента 5 курса

Мазеца А.Ю.

Научный руководитель

доцент, канд. техн. наук

Садов В.С.

Рецензент

«ДОПУСТИТЬ К ЗАЩИТЕ»

Зав. кафедрой интеллектуальных систем

академик ___________ А.Ф. Чернявский

«___» ____________ 2013 г.

МИНСК 2013

СОДЕРЖАНИЕ

Примечание ……………………………………………………………….3

Введение ………...………………………………..….….....……….……. 4     

Понятие «детерминированный хаос»

1.1 Детерминированность……………………………................…6

1.2 Хаос……….…………….……………….….……………..…… 6

1.3 Устойчивость и неустойчивость …………..…….……….……7

1.4 Нелинейность……...…...………………………………….……6

1.5 Неустойчивость и нелинейные ограничения…….……….……8

1.6 Детерминированный хаос….……………….…………….……11

1.7 Перемешивание ………………………………..……………...14

1.8 Вероятностные свойства детерминированных систем………16

1.9 Различия между случайными и хаотическими данными .......17

1.10 Детерминированный хаос- свойство материального мира…....18

Алгоритмы классического шифрования

2.1 Шифр Плейфейера……………………………………………..20

2.2 Шифр Виженера …………………………………………….....23

Алгоритм нелинейного шифрования

3.1 Основные методы …………………...…………….……………27

3.2 Модель генератора хаоса ……………………….………….….29

3.3 Описание алгоритма шифрования ……………….…….……..29

3.4 Описание алгоритма дешифрования ……………….…….…..34

3.5 Криптографический анализ алгоритма ………………………34

Программная реализация методов шифрования

Заключение……………………………………….……………………….39

Список использованных источников ..………………….………...…...40

Приложения ……………………………..……………………………….

ПРИМЕЧАНИЕ

ASCII - American Standard Code for Information Interchange.

Шифрование — процесс применения шифра к защищаемой информации, т. е. преобразование защищаемой информации (открытого текста) в шифрованное сообщение (шифротекст, криптограмму) с помощью определенных правил, содержащихся в шифре.

Дешифрование — процесс, обратный шифрованию, т. е. преобразование шифрованного сообщения в защищаемую информацию с помощью определенных правил, содержащихся в шифре.

Криптография — прикладная наука, она использует самые последние

достижения фундаментальных наук и, в первую очередь, математики. С другой стороны, все конкретные задачи криптографии существенно зависят от уровня развития техники и технологии, от применяемых средств связи и способов передачи информации.


ВВЕДЕНИЕ

Хаотические процессы в детерминированных нелинейных системах - одна из фундаментальных проблем современного естествознания. В начале  XX века было доказано, что в таких системах причина генерирования сложных колебательных процессов кроется не в большом числе степеней свободы и не в наличии флуктуаций, а в экспоненциальной неустойчивости режимов. Возможность подобных явлений понимал и предвидел А. Пуанкаре. В неустойчивых системах совершенно ничтожная причина, ускользающая от нас по своей малости, вызывает значительное действие, которое мы не можем предусмотреть.  Предсказание становится невозможным, мы имеем перед собой явление случайное" - так писал он еще в 1908 г. в книге "Наука и метод". Развитие идей Пуанкаре привело к созданию фундамента хаотической динамики детерминированных систем. Как оказалось, необходимым условием возникновения хаоса в динамических системах является размерность фазового пространства, то есть когда состояние системы характеризуется минимум тремя переменными.

В системах с двумя переменными состояния, фазовым пространством которых служит двумерная плоскость, возможные динамические режимы исчерпываются положениями равновесия и периодическими колебаниями (предельными циклами). Это обстоятельство многие годы служило психологическим барьером, преодолению которого не помогали даже очевидные экспериментальные результаты. Ограниченность "нелинейного мышления" на базе фазовой плоскости понимали многие ведущие ученые, однако из-за отсутствия соответствующего математического аппарата обоснованный выход с плоскости в пространство трех и более измерений был практически невозможен.

Цель работы:

-Рассмотреть основные цифровые методы генерирования хаотических процессов.

-Рассмотреть алгоритмы классического и нелинейного шифрования

-Смоделировать нелинейный метод шифрования и представить крипторгафический анализ


ГЛАВА 1.  ДЕТЕРМИНИРОВАННЫЙ ХАОС

1.1 Детерминированность

Что представляет собой явление детермированного хаоса?  Попытаюсь ответить на этот вопрос и привести математическую модель детерминированного хаоса. Вначале необходимо внести ясность в понимание терминов детермированность и хаос, а затем определить содержание термина детерминированный хаос. Когда говорят о детермированности, подразумевают однозначную взаимосвязь причины и следствия. Если задано некоторое начальное состояние системы при t = , то оно однозначно определяет состояние системы в любой момент времени t >  . Например, если тело движется равноускоренно, то его скорость определяется детерминированным законом

u(t) = u() + at.                                                  (1)

При задании начальной скорости u() мы однозначно определяем значение скорости u(t) в любой момент времени t > .

В общем случае зависимость будущего состояния x(t) от начального x() можно записать в виде x(t) = F [x()], где F - детерминированный закон, который осуществляет строго однозначное преобразование начального состояния x() в будущее состояние x(t) для любого t > .

1.2 Хаос

Теперь внесем ясность в понятие хаос. Проведем эксперимент с броуновской частицей. Поместим частицу в момент t =  в раствор жидкости и с помощью микроскопа начнем фиксировать ее положение во времени, отмечая координаты частицы через равные интервалы Δt. Нетрудно убедиться, что под действием случайных толчков со стороны окружающих молекул частица будет совершать нерегулярные блуждания, которые характеризуются запутанной траекторией. Повторим эксперимент несколько раз подряд, осуществляя в пределах возможностей воспроизводство начальных условий опыта. Каковы будут результаты? Очевидно, их будет два. Первый - каждый раз траектория движения частицы будет сложной, непериодической; второй - любая попытка однозначного повторения опыта приведет к отрицательному результату. Каждый раз при повторении опыта с одинаковыми (в пределах погрешности при измерениях) начальными условиями мы будем получать различные траектории движения частицы. Классическое явление движения броуновской частицы дает четкие физические представления о хаосе как о непредсказуемом, случайном процессе. Если мы говорим о хаосе, мы подразумеваем, что изменение во времени состояния системы является случайным (его нельзя однозначно предсказать) и невоспроизводимым (процесс нельзя повторить) [1].

Мы приходим к убеждению, что понятия детерминизм и хаос прямо противоположны по смыслу. Детерминизм ассоциируется с полной предсказуемостью и воспроизводимостью, хаос - с полной непредсказуемостью и невоспроизводимостью [5] . Возникает закономерный вопрос, что понимается под термином детерминированный хаос, где объединены два противоположных по смыслу понятия?

1.3 Устойчивость и неустойчивость

Нам понадобится понятие устойчивости или неустойчивости движения. Рассмотрим состояние покоя или равновесия системы. Поместим маленький шарик в нижнюю точку внутри полой сферы. Слегка толкнем его и понаблюдаем за движением. После совершения нескольких затухающих колебаний шарик вновь займет положение на дне сферы. Положение равновесия устойчиво: малые возмущения исходного состояния затухают во времени. Если мы поместим шарик на вершину сферы, то реакция на малое возмущение будет иной: при сколь угодно малом отклонении шарика от состояния равновесия он скатывается с вершины. Это положение равновесия неустойчиво: малые возмущения нарастают во времени.

Физический смысл понятия "устойчивость" ("неустойчивость") применительно к состоянию равновесия сохраняется и в отношении любого другого режима [7]. Режим функционирования динамической системы называют устойчивым, если малые возмущения затухают во времени, стремясь к нулю. Если этого не происходит и малые отклонения от режима функционирования системы нарастают во времени, такой режим будет неустойчивым.

1.4 Нелинейность

Теперь обсудим другое важное свойство сложных систем - нелинейность. Пусть мы имеем дело с неустойчивым режимом. Нарушив режим малым воздействием, мы сначала будем фиксировать нарастание возмущения. Будет ли оно бесконечным? В реальной жизни не будет. Отклонение будет нарастать до тех пор, пока не вступит в действие механизм нелинейного ограничения процесса нарастания возмущения. Что это такое? Ответим на этот вопрос с физической и математической точек зрения. С физической точки зрения нарастание амплитуды не может происходить до бесконечности. В силу ограниченности энергетических ресурсов системы это нарастание должно прекратиться или смениться уменьшением амплитуды отклонения. Любой новый режим должен иметь конечную амплитуду, и управляют этими процессами нелинейные законы. Свойства нелинейной системы непосредственно зависят от ее состояния. Приведем пример. Пусть зависимость амплитуды отклонения f (x) от исходного состояния x определяется соотношением

                                                    f (x) = kx - b ,                                                 (2)

где k и b - постоянные положительные коэффициенты.

Если x<<1, то bx 3<< kx и

f (x) ~ kx                                                          (3)

В последнем случае f (x) линейно растет с ростом x. Если же x становится сравнимым с единицей, то членом bx 3 пренебрегать уже нельзя. В случае (2) рост отклонения f (x) за счет члена kx начнет испытывать нелинейное ограничение в силу вычитания величины  b. При некоторых значениях x величина отклонения (2) вновь будет близка к нулю и все начнется сначала. Система будет, как бы автоматически себя регулировать, так как ее свойства зависят от текущего состояния.

1.5 Неустойчивость и нелинейное ограничение

Рассмотрим неустойчивую детерминированную систему с учетом нелинейного ограничения нарастаний возмущений. Для простоты рассмотрим состояние равновесия, которому отвечает точка в пространстве фазовых координат системы [8]. Выведем систему из равновесия малым отклонением. Это возмущение начнет нарастать в силу неустойчивости. Далее нарастание возмущения начнет замедляться (вступит в силу механизм нелинейного ограничения). В силу нелинейного ограничения отклонение уменьшится строго до нуля, система вернется в исходное состояние равновесия. Теоретически это возможно, однако очень маловероятно, так как исходное состояние равновесия неустойчиво. Более вероятна другая ситуация: система вернется в малую окрестность исходного состояния (подойдет очень близко к состоянию неустойчивого равновесия) и вновь (в силу неустой-чивости) начнет от него удаляться. Этот процесс будет длиться бесконечно.  

Рисунок 1. Рождение устойчивого предельного цикла Г в окрестности неустойчивого равновесия О. Поведение траекторий при малых (а) и при большиш (б) отклонениях от равновесия

Предположим, что мы имеем дело с двумерной дифференциальной динамической системой. Пространство ее состояний - фазовая плоскость с координатами x и y. Если малое возмущение состояния равновесия в такой системе будет нарастать, а в результате нелинейного ограничения далее уменьшаться, то возможны два варианта: появление новых устойчивых состояний равновесия вблизи неустойчивого либо переход в новый режим, отвечающий периодическим колебаниям.

Второй вариант на  рис. 1. При малых амплитудах возмущения (рис. 1, а) траектория по спирали удаляется от точки равновесия О. При больших отклонениях (рис. 1, б ) траектория возвращается. Вместо неустойчивого состояния равновесия появляется новый режим - периодические автоколебания, которым отвечает предельный цикл G на фазовой плоскости.

Рисунок 2. Поведение динамической системы, которое невозможно реализовать на плоскости в силу пересечения фазовых траекторий. Реально эта картина получается путем проекции трехмерной траектории на плоскость двух переменных

Неустойчивость состояния равновесия в двумерной нелинейной системе порождает режим устойчивых периодических колебаний. Если мы вообразим себе иную ситуацию, когда отклонение от состояния равновесия вначале нарастает, а затем в силу нелинейности вновь стремится к нулю, мы придем к противоречию: фазовая траектория обязана будет самопересекаться (рис. 2). Но из этого следует, что существуют различные начальные условия, приводящие в итоге к одинаковым состояниям. Это невозможно в силу теоремы единственности решения: при заданных начальных условиях решение существует и оно единственное.

1.6 Детерминированный хаос

Картина принципиально изменится, если мы рассмотрим динамическую систему, состояние которой характеризуется тремя независимыми переменными (фазовыми координатами). Давайте повторим наши рассуждения, осуществив выход с плоскости в трехмерное фазовое пространство. Ничто не запрещает нам реализовать ситуацию рис. 2 в пространстве трех измерений [11]. Траектория раскручивается в трехмерном пространстве, удаляясь от точки О по спирали. Достигнув некоторых значений и испытывая действие механизма нелинейного ограничения, траектория вновь вернется в окрестность исходного состояния. Далее ввиду неустойчивости процесс будет повторяться (рис. 3).

Рисунок 3. Возможный вид фазовой траектории в трехмерной нелинейной системе, отвечающей наличию странного аттрактора

Возможны два варианта: траектория спустя конечное время замкнется, демонстрируя наличие сложного, но периодического процесса; траектория будет воспроизводить некий апериодический процесс, если при t замыкания не произойдет. Второй случай и отвечает режиму детерминированного хаоса. Действительно, работает основной принцип детерминизма: будущее однозначно определено начальным состоянием. Однако процесс эволюции системы сложный, непериодический. Чисто внешне он ничем не отличается от случайного. Но при более детальном анализе вскрывается одно важное отличие этого процесса от случайного - этот процесс воспроизводим. Действительно, повторив еще раз начальное состояние, в силу детерминированности мы вновь воспроизведем ту же самую траекторию независимо от степени ее сложности. Значит, этот непериодический процесс не является хаотическим в смысле определения хаоса, данного нами выше? Да, это сложный, похожий на случайный, но тем не менее детерминированный процесс. Здесь важно то, что он характеризуется неустойчивостью и это обстоятельство позволяет нам понять еще одно принципиально важное свойство систем с детерминированным хаосом - перемешивание.

Хороший пример динамической системы — простой маятник. Его движение задаётся всего двумя переменными: положением и скоростью. Таким образом, его состояние — это точка на плоскости, координаты которой — положение маятника и его скорость. Эволюция состояния описывается правилом, которое выводится из законов Ньютона и выражается математически в виде дифференциального уравнения. Когда маятник качается взад-вперёд, его состояние — точка на плоскости — движется по некоторой траектории (орбите) [2]. В идеальном случае маятника без трения орбита представляет собой петлю; при наличии трения орбита закручивается по спирали к некоторой точке, соответствующей остановке маятника.

Рисунок 4. Наглядного представления поведения динамической системы.

Это абстрактное пространство, координатами в котором являются степени свободы системы. Например, движение маятника (вверху) полностью определено его начальной скоростью и положением (рис. 4). Таким образом, его состоянию отвечает точка на плоскости, координатами которой являются положение и скорость маятника (внизу). Когда маятник качается, эта точка описывает некоторую траекторию, или «орбиту», в фазовом пространстве. Для идеального маятника без трения орбита представляет собой замкнутую кривую (внизу слева), в противном случае орбита сходится по спирали к точке (внизу справа).

Динамическая система может развиваться либо в непрерывном времени, либо в дискретном времени. Первая называется потоком, вторая — отображением (иногда каскадом). Маятник непрерывно движется от одного положения к другому и, следовательно, описывается динамической системой с непрерывным временем, т.е. потоком. Число насекомых, рождающихся каждый год в определённом ареале, или промежуток времени между каплями из подтекающего водопроводного крана более естественно описывать системой с дискретным временем, т.е. отображением.

Чтобы узнать, как развивается система из заданного начального состояния, нужно совершить бесконечно малое продвижение по орбите, а для этого можно воспользоваться динамикой (уравнениями движения) [3]. При таком методе объём вычислительной работы пропорционален времени, в течение которого мы хотим двигаться по орбите. Для простых систем типа маятника без трения может оказаться, что уравнения движения допускают решение в замкнутой форме, т.е. существует формула, выражающая любое будущее состояние через начальное состояние. Такое решение даёт «путь напрямик», т.е. более простой алгоритм, в котором для предсказания будущего используется только начальное состояние и окончательное время и который не требует прохода через все промежуточные состояния. В таком случае объём работы, затрачиваемой на прослеживание движения системы, почти не зависит от конечного значения времени. Так, если заданы уравнения движения планет и Луны, а также положения и скорости Земли и Луны, то можно, например, на много лет вперёд предсказать затмения.

Благодаря успешному нахождению решений в замкнутой форме для многих разнообразных простых систем на ранних стадиях развития физики появилась надежда, что для всякой механической системы существует такое решение. Теперь известно, что это, вообще говоря, не так. Непредсказуемое поведение хаотических динамических систем нельзя описать решением в замкнутой форме. Значит, при установлении их поведения у нас нет никакого «пути напрямик».

1.7 Перемешивание

Мы установили, что в динамических системах, размерность фазового пространства которых N≥3, теоретически возможен режим сложных непериодических пульсаций. Этот тип движения детерминирован и характеризуется неустойчивостью. У меня возник вопрос почему? Поговорим об устойчивых режимах движения в детерминированных динамических системах, в которых имеются потери энергии, которые называют диссипативными [4].

Рассмотрим в качестве начального состояния не точку с определенными координатами в пространстве состояний , а малую сферу радиуса ε > 0, окружающую эту точку. Любая точка внутри сферы характеризует малое отклонение от . Сфера включает совокупность возможных отклонений от исходного состояния, не превышающих по модулю ε. Теперь проследим за трансформацией этой сферы во времени (вдоль траектории). В силу устойчивости выбранного нами режима любое малое отклонение во времени должно затухать. Это означает, что под действием детерминированного закона эволюции шарик радиуса ε во времени будет уменьшаться и при  его радиус уменьшится до нуля. Сказанное выше иллюстрирует рис. 4. Исходный фазовый объем в диссипативных системах во времени уменьшается.

А если исходный режим неустойчив? В этом случае фазовый объем может увеличиваться до бесконечности, если неустойчивая система линейна. Но если система нелинейная и диссипативная, то процесс эволюции начального малого фазового объема будет нетривиальным.

Неустойчивость режима ведет к росту возмущений. Это одно обстоятельство. Второе - диссипативные системы вне зависимости от вида устойчивости вызывают уменьшение элемента фазового объема во времени до нуля, что обусловлено потерями энергии. Чтобы совместить эти два фактора существует единственное решение этой дилеммы: элемент фазового объема по некоторым направлениям должен растягиваться, а по другим - сжиматься, причем степень сжатия в среднем должна обязательно преобладать над степенью расширения, чтобы в итоге фазовый объем во времени уменьшался. В нелинейных диссипативных системах это оказывается возможным. В силу наличия механизма нелинейного ограничения фазовая траектория сложного режима колебаний сосредоточена в ограниченной области фазового пространства (см. рис. 3). При этом любая малая окрестность исходного начального состояния преобразуется и, в итоге, перемещается по всей области, занятой траекторией.

Рисунок 5. Сжатие первоначальной области неопределенности 1 во времени в случае, когда цикл Г является устойчивым предельным режимом

Проведем мысленный эксперимент. В стакан с водой поместим маленькую чаинку и размешаем воду ложкой, вызвав неустойчивость. Чаинка будет при этом двигаться по сложной спиралеобразной траектории, которая обусловлена движением воды в стакане. При этом в любой заданный момент времени мы теоретически можем зафиксировать ее координаты x(t) в объеме воды. Теперь вместо чаинки поместим в стакан с водой очень маленькую капельку чернил и вновь размешаем воду. Что при этом произойдет? Чернила практически равномерно разбегутся по всему объему воды, слегка окрасив ее. Частички чернил, первоначально сосредоточенные в маленьком объеме капельки, спустя время перемешивания можно будет обнаружить в любой части объема воды в стакане. В жизни этот процесс мы называем перемешиванием. В математике это понятие также существует и с точки зрения физической интерпретации оказывается близким по смыслу. Действительно, поток воды в стакане, созданный движением чайной ложки, можно интерпретировать как действие детерминированного закона, определяющего динамическую систему. Чаинка при этом будет двигаться по сложной, но детерминированной траектории. А капелька чернил, которую можно интерпретировать как некий маленький объем в фазовом пространстве вокруг чаинки, перемешается во всем объеме воды [6].

1.8 Вероятностные свойства детерминированных систем

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

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

Неопределенность в задании начального состояния - ситуация вполне реальная с точки зрения физики. Действительно, в силу конечной точности регистрации состояния любыми приборами оно определяется с конечной (пусть сколь угодно малой) ошибкой. Это означает, что нужно анализировать эволюцию во времени не начальной точки, а начальной области вокруг этой точки. В силу перемешивания мы столкнемся с процессом, подробно описанным выше.

1.9 Различия между случайными и хаотическими данными

Только по исходным данным трудно сказать, каким является наблюдаемый процесс - случайным или хаотическим, потому что практически не существует явного чистого сигнала отличия. Всегда будут некоторые помехи, даже если их округлять или не учитывать. Это значит, что любая система, даже если она детерминированная, будет содержать немного случайностей. Чтобы отличить детерминированный процесс от стохастического, нужно знать, что детерминированная система всегда развивается по одному и тому же пути от данной отправной точки. Чтобы проверить процесс на детерминизм необходимо:

  1.  выбрать тестируемое состояние;
  2.  найти несколько подобных или почти подобных состояний;
  3.  сравнить их развитие во времени.

Погрешность определяется как различие между изменениями в тестируемом и подобном состояниях. Детерминированная система будет иметь очень маленькую погрешность (устойчивый, постоянный результат) или она будет увеличивается по экспоненте со временем (хаос). Стохастическая система будет иметь беспорядочно распределенную погрешность.

По существу все методы определения детерминизма основываются на обнаружении состояний, самых близких к данному тестируемому (то есть, измерению корреляции, экспоненты Ляпунова, и т.д.). Чтобы определить состояние системы обычно полагаются на пространственные методы определения стадии развития. Исследователь выбирает диапазон измерения и исследует развитие погрешности между двумя близлежащими состояниями. Если она выглядит случайной, тогда нужно увеличить диапазон, чтобы получить детерминированную погрешность. Кажется, что это сделать просто, но на деле это не так. Во-первых, сложность состоит в том, что, при увеличении диапазона измерения, поиск близлежащего состояния требует намного большего количества времени для вычислений чтобы найти подходящего претендента. Если диапазон измерения выбран слишком маленьким, то детерминированные данные могут выглядеть случайными, но если диапазон слишком большой, то этого не случится — метод будет работать.

Когда в нелинейную детерминированную систему вмешиваются внешние помехи, ее траектория постоянно искажается. Более того, действия помех усиливаются из-за нелинейности и система показывает полностью новые динамические свойства. Статистические испытания, пытающиеся отделить помехи от детерминированной основы или изолировать их, потерпели неудачу. При наличии взаимодействия между нелинейными детерминированными компонентами и помехами, в результате появляется динамика, которую традиционные испытания на нелинейность иногда не способны фиксировать.

1.10 Детерминированный хаос - свойство материального мира

Путем простейших рассуждений мы пришли к выводу о возможности режима детерминированного хаоса в нелинейных системах с диссипацией энергии. В современной науке этот эффект обоснован теоретически и достоверно подтвержден экспериментально. Может возникнуть вопрос: не является ли этот феномен математической экзотикой в том смысле, что его реализация теоретически возможна, но практически маловероятна? Нет. После открытия детерминированного хаоса, ясного понимания свойств эффекта и разработки методов его диагностики хаос был обнаружен практически во всех областях современного естествознания: в физике, радиотехнике, химии, биологии, механике, экономике и др. Может возникнуть естественный вопрос: почему до недавнего времени этот типичный режим функционирования динамических систем не был обнаружен и описан? Этому есть объяснение.

Хотя теоретически подавляющее число реальных материальных систем и процессов нелинейно, существует широкий класс процессов, достаточно корректно описываемых в линейном или квазилинейном приближении. Линейная теория динамических систем и процессов разработана достаточно полно и позволяет дать их исчерпывающее описание, хорошо согласующееся с экспериментом. Но детерминированный хаос - явление, присущее исключительно нелинейным системам. А в отношении нелинейной теории дела обстоят намного хуже. Пока не существует, например, общей теории решения нелинейных дифференциальных уравнений. Анализ динамики нелинейных систем и сейчас требует искусства, творческого подхода, индивидуального в каждом конкретном случае.

Именно отсутствие строгих теоретических результатов применительно к нелинейным системам сдерживало открытие и понимание этого универсального явления. Экспериментаторы давно сталкивались с проявлением хаоса. Однако ограниченность теоретических знаний, обусловленная влиянием линейной и квазилинейной структуры научного мышления, приводила к ошибкам в трактовке наблюдаемых результатов. Был сделан вывод о том, что шумоподобные колебания обусловлены либо действием флуктуаций, либо огромным числом степеней свободы системы, либо неисправностью измерительной аппаратуры.

Сейчас положение изменилось. Наша жизнь все более настоятельно требует количественного учета таких факторов, как сверхвысокая плотность, сверхвысокая температура, давление, сверхвысокие скорости, плотности населения и т.д. А, как известно, учет этих факторов требует принципиально нелинейного подхода к описанию эволюционных процессов. Эти процессы моделируются и анализируются с помощью компьютеров, для которых нелинейность модели не является препятствием для детального анализа

ГЛАВА 2. «АЛГОРИТМЫ КЛАССИЧЕСКОГО ШИФРОВАНИЯ»

2.1 Шифр Плейфейера

Одним из наиболее известных шифров, базирующихся на методе многобуквенного шифрования, является шифр Плейфейера (Playfair), в котором биграммы открытого текста рассматриваются как самостоятельные единицы, преобразуемые в заданные биграммы шифрованного текста. 2

Алгоритм Плейфейера основан на использовании матрицы букв размерности 5 × 5, созданной на основе некоторого ключевого слова.

Таблица 1. Таблица, созданная на основе ключевого слова MAZETS

M

A

Z

E

T

S

B

C

D

F

G

H

I

K

L

N

O

P

Q

R

U

V

W

X

Y

В данном случае ключевым словом является MAZETS . Матрица создается путем размещения букв, использованных в ключевом слове, слева направо сверху вниз (повторяющиеся буквы отбрасываются). Затем оставшиеся буквы алфавита размещаются в естественном порядке в оставшихся строках и столбцах матрицы. Буквы I и J считаются одной и той же буквой. Открытый текст шифруется порциями по две буквы в соответствии со следующими правилами.

1. Если оказывается, что повторяющиеся буквы открытого текста образуют одну пару для шифрования, то между этими буквами вставляется специальная буква заполнитель, например X. В частности, такое слово как balloon будет преобразовано к виду ba lx lo on.

2. Если буквы открытого текста попадают в одну и ту же строку матрицы, каждая из них заменяется буквой, следующей за ней в той же строке справа – с тем условием, что для замены последнего элемента строки матриц служит первый элемент той же строки. Например, ar шифруется как RM.

3. Если буквы открытого текста попадают в один и тот же столбец матрицы, каждая из них заменяется буквой, стоящей в том же столбце сразу после ней, с тем условием, что для замены самого нижнего элемента столбца матрицы берется самый верхний элемент того же столбца.

4. Если не выполняется ни одно из приведенных выше условий, каждая буква из пары букв открытого текста заменяется буквой, находящейся на пересечении содержащей эту букву строки матрицы и столбца, в котором находится вторая буква открытого текста. Например, hs шифруется как BP, а ea – как IM (или JM, по желанию шифровальщика).

Шифр Плейфейера значительно надежнее простых моноалфавитных шифров. С одной стороны, букв всего 26, а биграмм – 26 × 26 = 676, и уже поэтому идентифицировать биграммы сложнее, чем отдельные буквы. С другой стороны, относительная частота появления отдельных букв колеблется гораздо в более широком диапазоне, чем частота появления биграмм, поэтому анализ частотности употребления биграмм тоже оказывается сложнее анализа частотности употребления букв. По этим причинам очень долго считалось, что шифр Плейфейера взломать невозможно.

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

Один из способов оценки эффективности шифра Плейфейера и других шифров показан на рис. 6 Линия, помеченная на рис. 6 как открытый текст, отображает распределение значений относительной частоты вхождения символов алфавита в статье Encyclopaedia Brittanica, посвященной криптологии и содержащей более 70000 символов. Подобный график характерен для распределения относительной частоты появления символов и для любого моноалфавитного шифра. Сам график получается следующим образом. Число

вхождений буквы в тексте делится на число появлений в тексте символа e (самый часто используемый символ в английском языке). В результате e имеет относительную частоту 1, t – около 0,76 и т.д. Деления на горизонтальной оси соответствуют буквам в порядке снижения значений относительной частоты их появления.

Рисунок 6. Упорядоченные по частоте появления буквы. Относительная частота появления букв. 1- Открытый текст; 2- Шифр Плейфейера; 3- Шифр Виженера;

4- Полиалфавитный шифр со случайным ключом

На рис. 6 также показан график распределения значений частоты для текстов, шифрованных с помощью шифра Плейфейера. С целью нормализации число появлений в шифрованном тексте той или иной буквы делилось на число вхождений буквы e в открытом тексте. Полученные в результате нормализации графики показывают, насколько частота 45 распределения букв (при использовании которой раскрытие, например, подстановочных шифров оказывается совсем простым делом) маскируется шифрованием. Если в процессе

шифрования информация о распределении полностью скрывается, график для шифрованного с помощью такого шифра текста должен представлять собой горизонтальную прямую линию, а криптоанализ такого текста с использованием лишь шифрованного текста, по-видимому, должен оказаться практически невозможным. Как видно из рис. 6. шифр Плейфейера имеет более пологий график распределения значений частоты по сравнению с открытым текстом, но все же предоставляет криптоаналитику достаточно широкие возможности для статистического анализа сохранившихся структур [14].

2.2 Шифр Виженера

Наиболее известными являются шифры замены, или подстановки, особенностью которых является замена символов (или слов, или других частей сообщения) открытого текста соответствующими символами, принадлежащими алфавиту шифротекста. Различают одноалфавитную и многоалфавитную замену. Вскрытие одноалфавитных шифров основано на учете частоты появления отдельных букв или их сочетаний (биграмм, триграмм и т. п.) в данном языке. Классические примеры вскрытия таких шифров содержатся в рассказах Э. По "Золотой жук" и А.Конан Дойля "Пляшущие человечки". Примером многоалфавитного шифра замены является так называемая система Виженера. Шифрование осуществляется по таблице, представляющей собой квадратную матрицу размерностью п X n, где п - число символов используемого алфавита. На рис.4 показана таблица Виженера для русского языка (алфавит Z32- 32 буквы и пробел). Первая строка содержит все символы алфавита. Каждая следующая строка получается из предыдущей циклическим сдвигом последней на символ влево.

Рисунок 7. Таблица Виженера для алфавита Z32

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

ГРУЗИТЕ АПЕЛЬСИНЫ БОЧКАМИ ТЧК БРАТЬЯ КАРАМАЗОВЫ ТЧК

С помощью ключа ВЕНТИЛЬ запишем строку исходного текста с расположенной под ней строкой с циклически повторяемым ключом:

ГРУЗИТЕ АПЕЛЬСИНЫ БОЧКАМИ ТЧК БРАТЬЯ КАРАМАЗОВЫ ТЧК

ВЕНТИЛЬВЕНТИЛЬВЕНТИЛЬВЕНТИЛЬВЕНТИЛЬВЕНТИЛЬВЕНТИЛЬВЕ

В результате шифрования, начальный этап которого показан на рисунке 5,получим шифротекст:

ЕХ ЩРЭАБЕЫЧУДККТИСЙЩРМЕЩЬЗЭРМДОБИЭУАДЧТШЛЕВМЪФГКЛЩП

          Г Р У З И Т Е А П Е Л Ь С И Н Ы Б О Ч К А М И

Рисунок 8. Принцип шифрования по таблице Виженера

Расшифрование осуществляется следующим образом. Под буквами шифро-текста последовательно записываются буквы ключа; в строке таблицы, соответствующей очередной букве ключа, происходит поиск соответствующей буквы шифротекста. Находящаяся над ней в первой строке таблицы буква является соответствующей буквой исходного текста. Для увеличения надежности шифра можно рекомендовать его использование после предварительной псевдослучайной перестановки букв в каждой строке

таблицы. Возможны и другие модификации метода [15].


ГЛАВА 3. «АЛГОРИТМ НЕЛИНЕЙНОГО ШИФРОВАНИЯ»

3.1 Основные методы

Область информационной безопасности является интенсивно развивающейся на данный момент. Очень часто обеспечение информационной безопасности требуется при передаче каких-либо компьютерных типов данных, обычно отправляемых, например, по электронной почте или с помощью других электронных средств, включая Интернет-загрузку, потоковое аудио, видео и другие файлы данных [10]. Особенно остро вопрос безопасности встает при осуществлении финансовых сделок, а также при передаче сообщений в военном или правительственном контекстах. Если эта информация в результате действия злоумышленников окажется раскрытой, то последствия для пользователей могут быть катастрофическими. Например, могут произойти огромные финансовые потери, разглашение конфиденциальной информации, потеря доверия со стороны клиентов и нарушения деятельности пользователей. В этих случаях секретные данные можно было бы отправлять от получателя к приемнику по безопасным каналам связи, таким как тайные курьеры, безопасные телефонные линии и т.п., но зачастую это непрактично и дорого.

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

Для защиты информации при передаче от одной конечной точки к другой, а также при её хранении, используются различные методы шифрования данных. В них обычные данные преобразуются в безопасные закодированные данные (зашифрованный текст) с использованием метода или алгоритма шифрования с секретным ключом. Секретный ключ известен только отправителю и получателю. Получатель может расшифровать данные, используя ранее согласованный секретный ключ и обратный алгоритм шифрования.

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

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

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

Метод хаотического уравнения (аттрактор Лоренца, множество Мандельброта) используются для аутентификации пользователей.

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

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

Метод кодирования графической информации с использованием хаотического генератора. Метод основан на изменении цвета каждого образа символа согласно псевдослучайному закону.

3.2 Модель генератора хаоса 

В данной работе в качестве генератора хаоса использован аттрактор Лоренца, описываемый системой дифференциальных уравнений (4):

)                                        (4)

Здесь  r=28,σ=10,b=83,tвремя. В алгоритме шифрования используется сшивка из решений системы (4):

f(t)=AX(t)+BY(t)+CZ(t)(2)


3.3 Описание алгоритма шифрования 

1. Каждый символ текстового файла представляем в виде ASCII-кода. В результате получаем массив ascii (см. рис.9) из N чисел. Здесь N− количество символов в исходном тексте [12]. Массив сортируем по возрастанию. При этом если среди элементов массива встречается несколько одинаковых, оставляем только один из них. В результате получим массив u (см. рис.10 и 11). Следует отметить, при шифровании не текстовой, а другой информации, вместо массива из символов ASCII-кода имеем массив ascii, состоящий из других символов. В то же время при этом принципиально в алгоритме ничего не меняется.

2. В массиве  запоминаем номера отсчётов массива ascii, совпадающих по уровню с каждым из элементов массива u (см. рис.11). Таким образом, размерность массива   равна размерности массива ascii.

3. В массиве   запоминаем количество повторений в исходном сигнале каждого из отсчётов, записанных в массив u (см. рис.11). Следовательно, массивы u и  имеют одинаковую размерность.

Рисунок 9.

Графическое представление массива из ASCII-кодов

Рисунок 10.

Массив u, содержащий отсортированные по возрастанию и взятые в единственном экземпляре коды символов

4. Здесь возможны два различных варианта:

A) Умножаем каждый элемент массива u на постоянный коэффициент k, т.е. вычисляем ku. Затем в конец массива ku добавляем массив 2ku и переобозначим весь массив через ku. После этого в конец полученного массива ku добавляем массив 3ku, переобозначив полученный массив через ku. Так продолжаем до тех пор, пока длина массива ku не станет больше dim(+). Далее в точках временной оси t, совпадающих с элементами массива ku, находим решения аттрактора Лоренца (4). При этом решения системы дифференциальных уравнений (4) могут быть как положительными, так и отрицательными. В результате получаем массив X (см. рис.12).

B) Получаем решения аттрактора Лоренца (4) на интервале, длина которого больше длины массива +. Для образования массива X берем точки из области хаотичности полученных решений (см. рис13). Количество выбранных точек должно быть равно количеству элементов массива dim(+). То, каким образом выбираются точки, должно быть известно передатчику и приемнику.

Рисунок 11. К пояснению создания массивов u, ,


Рисунок 12. Массив, построенный в точках   массива k  (соответствует столбцу А).

Рисунок 13. Массив X, построенный в точках,   взятых через равные интервалы в области хаотичности решений аттрактора Лоренца (4) (соответствует столбцу В)

5. Осуществляем сдвиг зависимости, например, X(t) , в область положительных значений: X(t)+Δ. Константа Δ выбирается из условия X(t)+Δ≥0 для t. Нормируем отсчёты X(t)+Δ так, чтобы максимальный из них был равен размерности массива . Так получим массив X1, элементы которого равны отсчётам зависимости X1(t).

6. Округляем элементы массива X1.

7. Создаем массив  длиной dim(+), состоящий из условных символов, например -1. Перебираем по порядку элементы массива X1. Допустим, очередной элемент с номером M1 имеет значение a (см. рис.6). Тогда в массив  после элемента с номером a−1 добавляем пустую ячейку, сдвигая при этом элементы, начиная с номера a, на одну единицу вправо. В добавленную ячейку записываем элемент с номером M1 из массива . Когда таким образом пройдем весь массив , начинаем распределять элементы массива  (см. рис.7). В результате получим новый массив  длиной 2dim(+). Количество элементов в массиве  можно уменьшить, если в случае последовательно стоящих нескольких -1 передавать только количество таких элементов.

 

Рисунок 14. К пояснению массива

Рисунок 15. К пояснению массива

По каналу связи передаются массивы u, , а также коэффициент k, если массив X был образован способом A (см. п.4).

3.4 Описание алгоритма дешифрования 

Декодирование сигнала в приёмнике происходит в следующем порядке.

1. В приёмнике имеем массивы u и , а также коэффициент k при применении способа A (см. п.4 в алгоритме шифрования). Знаем также параметры аттрактора Лоренца (4) и начальные условия.

2. Запускаем аттрактор Лоренца (4) и получаем его решение X(t) в соответствующих точках в зависимости от используемого способа (см. п.4 в алгоритме шифрования).

A. В моменты времени, соответствующие элементам массива ku.

B. По договоренности.

3. Производим нормирование элементов массива X в том же порядке, что и при шифровании. В результате получим массив X1.

4. Округляем элементы массива X1 так же, как и при шифровании

5. Зная отсчёты X1(t), выделяем из массива  массивы  и .

6. Зная массивы ,   и u, восстанавливаем массив ascii и получаем исходный зашифрованный файл.


3.5 Криптографический анализ алгоритма 

При анализе считается, что алгоритм шифрования известен, и криптографическая стойкость шифра полностью определяется секретностью ключа. В рассматриваемом методе известными являются как алгоритм, так и закодированные сообщения, включающие в себя коэффициент k, массивы u и  . Ключом алгоритма являются параметры аттрактора Лоренца и начальные условия. Алгоритм является симметричным [14].

Достоинством разработанного алгоритма является бесконечное пространство ключей. Проанализируем возможность вскрытия зашифрованного данным алгоритмом текста. Следует отметить, что тексты, зашифрованные различными ключами, будут отличаться друг от друга (см. рис.16). Видно, что использование для шифрования аттрактора Лоренца с начальными условиями, в которых X(0) отличаются на одну миллионную, приводит к совершенно разным зашифрованным массивам  . Массивы  , соответствующие различным текстам, зашифрованным аттрактором Лоренца с одинаковыми начальными условиями, также отличаются друг от друга существенно. Если попытаться вычислить открытый текст путем всевозможных перестановок, то их количество равно N3!, где N3=dim(n3).

 

Рисунок 16.

Массивы , полученные перемешиванием массивов  и ; первый график соответствует открытому тексту (здесь массив  присоединен в самом конце и представляет собой последний возрастающий участок); второй соответствует зашифрованному тексту с начальными условиями для аттрактора Лоренца (1,1,1); третий- зашифрованному тексту с начальными условиями для аттрактора Лоренца (1.000001, 1,1); четвертый- другому зашифрованному тексту с начальными условиями для аттрактора Лоренца (1,1,1).

При попытке вскрытия с использованием уже открытого текста можно попытаться найти функцию X(t), соответствующую решению аттрактора Лоренца (4) в точках массива u. Пусть злоумышленник, зная шесть точек массива X(см. рис.17), пытается получить начальные условия для аттрактора Лоренца X( ),Y(),Z(). Для этого он запускает решатель в обратном направлении по оси t для каждой из шести точек на соответствующих интервалах t. В пакете MATLAB получение решений аттрактора Лоренца (4) в обратном направлении по оси t сводится к решению системы дифференциальных уравнений (4) с заменой t′=+it на интервале [,i],i=1,2,…,6. Здесь i− конечная точка, используемая для взлома. Тогда система уравнений (4), после переобозначения t′→t примет вид:

                                             (5)

 

Далее следует произвести зеркальное отражение решений системы (5) относительно оси ординат со сдвигом вправо по оси t так, чтобы начало кривой совпало с началом координат. Результаты вычислений представлены на рисунке 17, из которого видно, что для аттрактора Лоренца (4) восстановление начальных условий X(),Y(),Z() подобным образом не представляется возможным. Это связано с тем, что в аттракторе Лоренца малая первоначальная ошибка многократно возрастает в последующих состояниях системы. Таким образом, найти точные начальные условия системы уравнений (4) не представляется возможным, если даже знать весь массив X. Следовательно, подбор ключа подобным способом невозможен [15].

 

Рисунок 17.

Решение аттрактора Лоренца для различных начальных условий в обратном направлении по оси t. Кривая с номером 0 получена решением системы уравнений (4) в прямом направлении на интервале [, ] = [0,1] с начальными условиями (X(0),Y(0),z(0))=(1,1,1). В качестве начальных точек для кривых 1-б взяты последние 6 точек на кривой с номером 0 (см. правый верхний угол). А- использовался решатель ode45 пакета MATLAB; б- использовался решатель ode15s пакета MATLAB.


ГЛАВА 4. «ПРОГРАММНАЯ РЕАЛИЗАЦИЯ МЕТОДОВ ШИФРОВАНИЯ»

Здесь будет описание функциональной части!

Рисунок 18.  Диалоговое окно программы


Здесь будет описание функциональной части!


ЗАКЛЮЧЕНИЕ 


       Проведённый анализ показывает эффективность разрабатываемого метода шифрования с точки зрения криптографической стойкости. Стойкость алгоритма к попыткам несанкционированного дешифрования обусловлена невоспроизводимостью хаотических систем при неизвестных параметрах и начальных условиях, так как при малейшем несоответствии этих значений истинным поведение системы совершенно отличается от исходного, и восстановить сигнал невозможно. В предложенном алгоритме объём информации, которую необходимо хранить или передать по каналу связи для правильного дешифрования адресатом, составляет от 25% до 100% от объёма полезной информации.Но, это та цена, которую приходится платить за криптографическую стойкость алгоритма.


СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Шустер Г. Детерминированный хаос: Введение. М.: Мир, 1988. Гл. 1, 5.

2. Анищенко В.С. Сложные колебания в простых системах. М.: Наука, 1990.

3. Рабинович М.И. // Успехи физ. наук. 1978. Т. 125, № 1. С. 123.

4. Dimensions and entropies in chaotic systems. (Edited by G. Mayer-Kress). Springer-     Verlag, 1986.

5. Я. Г. Синай. Случайность неслучайного. Природа, 1981, № 3, с. 72–80.

6. Фейгенбаум М. Универсальное поведение нелинейных систем//УФН, т. 141,   вып. 3, 1983. с. 343-374.

7. Шустер Г. Детерминированный хаос: введение. - М.: Мир, 1988.

8. Николис Дж. Динамика иерархических систем: эволюционное представление. -М.:Мир., 1989.

9. Гулд. Х., Тобочник Я. Компьютерное моделирование в физике. Т. 1-М.: Мир, 1990.

10. Сапожникова Ю.В., Андреев В.В. Хаос и кодирование информации. // В кн.: Информационные технологии в профессиональной деятельности и научной работе: сборник материалов Всероссийской научно-практической конференции с международным участием. – Йошкар-Ола: Марийский государственный технический университет: в 2 ч. – Ч.2. 2009. 184 c. Сс. 9- 12.

11. Шустер Г. Детерминированный хаос: введение. – М.: Мир, 1988. 240 с.

12. Интернет ресурс «Журнал Радиоэлектроники» http://jre.cplire.ru

13. Интернет ресурс  http://4edz.ru

14. Алферов А.П.,Зубов А.Ю.,Кузьмин А.С.,Черемушкин А.В. Основы

криптонрафии,Москва, Гелиос АРВ,2001,479С.

15. Бабаш А.В., Шанкин Г.П. Криптография. Москва, Солон-Р, 2002,511С.


ПРИЛОЖЕНИЕ

Исходный код программы

// plfDlg.cpp : implementation file

//

#include "stdafx.h"

#include "plf.h"

#include "plfDlg.h"

#include <iostream>

#include <stdlib.h>

#include <time.h>

#ifdef _DEBUG

#define new DEBUG_NEW

CString Key = "";

CString MyText = "";

CString ResText = "";

CString R = "";

CString Al = "ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯabcdefghijklmnopqrstuvwxyzабвгґдеєжзиіїйклмнопрстуфхцчшщьюя !@\"#№$;%^:&?*()-_+={}[]\\/<>.,~`0123456789";

CString Pust = "";

CString S="";    

char Resh[10][16];

#endif

// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog

{

public:

   CAboutDlg();

// Dialog Data

   enum { IDD = IDD_ABOUTBOX };

   protected:

   virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

// Implementation

protected:

   DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

   CDialog::DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

END_MESSAGE_MAP()

// CplfDlg dialog

CplfDlg::CplfDlg(CWnd* pParent /*=NULL*/)

   : CDialog(CplfDlg::IDD, pParent)

   , MyText(_T(""))

   , ResText(_T(""))

   , R(_T(""))

   , Al(_T("ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯabcdefghijklmnopqrstuvwxyzабвгґдеєжзиіїйклмнопрстуфхцчшщьюя !@\"#№$;%^:&?*()-_+={}[]\\/<>.,~`0123456789"))

   , Key(_T("mazets"))

   , Pust(_T(""))

   , radio1(false)

   , radio2(false)

   , ttt(false)

   , tClock(0)

   , len1(0)

   , len2(0)

{

   m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

 }

void CplfDlg::DoDataExchange(CDataExchange* pDX)

{

   CDialog::DoDataExchange(pDX);

   DDX_Control(pDX, IDC_RICHEDIT21, rec1);

   DDX_Text(pDX, IDC_RICHEDIT22, MyText);

   DDX_Text(pDX, IDC_RICHEDIT23, ResText);

   DDX_Text(pDX, IDC_RICHEDIT21, R);

   DDX_Text(pDX, IDC_EDIT1, Key);

   DDX_Control(pDX, IDC_BUTTON1, button1);

   DDX_Control(pDX, IDC_BUTTON2, button2);

   DDX_Control(pDX, IDC_BUTTON3, button3);

   DDX_Control(pDX, IDC_BUTTON4, button4);

   DDX_Control(pDX, IDC_BUTTON5, button5);

   DDX_Control(pDX, IDC_BUTTON6, button6);

   DDX_Control(pDX, IDC_LABEL, label2);

   DDX_Control(pDX, IDC_RICHEDIT22, text1);

   DDX_Control(pDX, IDC_RICHEDIT23, text2);

   DDX_Control(pDX, IDC_PROGRESS1, progressbar);

   DDX_Control(pDX, IDC_EDIT1, key);

   DDX_Text(pDX, IDC_LABEL7, tClock);

   DDX_Text(pDX, IDC_LABEL1, len1);

   DDX_Text(pDX, IDC_LABEL2, len2);

}

BEGIN_MESSAGE_MAP(CplfDlg, CDialog)

   ON_WM_SYSCOMMAND()

   ON_WM_PAINT()

   ON_WM_QUERYDRAGICON()

   //}}AFX_MSG_MAP

   ON_BN_CLICKED(IDC_BUTTON2, &CplfDlg::OnBnClickedButton2)

   ON_BN_CLICKED(IDC_RADIO1, &CplfDlg::OnBnClickedRadio1)

   ON_BN_CLICKED(IDC_RADIO2, &CplfDlg::OnBnClickedRadio2)

   ON_BN_CLICKED(IDC_BUTTON3, &CplfDlg::OnBnClickedButton3)

   ON_BN_CLICKED(IDC_BUTTON5, &CplfDlg::OnBnClickedButton5)

   ON_EN_CHANGE(IDC_RICHEDIT22, &CplfDlg::OnEnChangeRichedit22)

   ON_EN_CHANGE(IDC_RICHEDIT23, &CplfDlg::OnEnChangeRichedit23)

END_MESSAGE_MAP()

// CplfDlg message handlers

BOOL CplfDlg::OnInitDialog()

{

       CDialog::OnInitDialog();

       // Add "About..." menu item to system menu.

   // IDM_ABOUTBOX must be in the system command range.

   ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

   ASSERT(IDM_ABOUTBOX < 0xF000);

   CMenu* pSysMenu = GetSystemMenu(FALSE);

   if (pSysMenu != NULL)

   {

       CString strAboutMenu;

       strAboutMenu.LoadString(IDS_ABOUTBOX);

       if (!strAboutMenu.IsEmpty())

       {

           pSysMenu->AppendMenu(MF_SEPARATOR);

           pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

       }

   }

   // Set the icon for this dialog.  The framework does this automatically

   //  when the application's main window is not a dialog

   SetIcon(m_hIcon, TRUE);            // Set big icon

   SetIcon(m_hIcon, FALSE);        // Set small icon

   // TODO: Add extra initialization here

   /*CDC* dc=GetDlgItem(IDC_RICHEDIT21)->GetDC(); // можно это удалить

   CFont* font;font->CreatePointFont(60, "Wingdings", dc);

   GetDlgItem(IDC_RICHEDIT21)->SetFont(font);*/

   CFont font;

font.CreateFontA(16,0,0,0,FW_NORMAL,FALSE,FALSE,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,"Courier New");

   rec1.SetFont(&font, 1);

   text1.SetFont(&font,1);

   text2.SetFont(&font,1);

   text1.LimitText(4297589136);

   text2.LimitText(4297589136);

   this->button2.EnableWindow(true);

   this->button3.EnableWindow(true);

   this->button4.EnableWindow(false);

   this->radio1=true;

   this->MyText="";

   this->CheckDlgButton(IDC_RADIO1, 1);

   char * s = new char[17];

   int i = this->ResText.GetLength();

   itoa(i,s,10);

   this->label2.SetWindowTextA(s);

   text1.SetEventMask(ENM_CHANGE);

   text2.SetEventMask(ENM_CHANGE);

   UpdateData(false);

   return TRUE;  // return TRUE  unless you set the focus to a control

}

void CplfDlg::OnSysCommand(UINT nID, LPARAM lParam)

{

   if ((nID & 0xFFF0) == IDM_ABOUTBOX)

   {

       CAboutDlg dlgAbout;

       dlgAbout.DoModal();

   }

   else

   {

       CDialog::OnSysCommand(nID, lParam);

   }

}

// If you add a minimize button to your dialog, you will need the code below

//  to draw the icon.  For MFC applications using the document/view model,

//  this is automatically done for you by the framework.

void CplfDlg::OnPaint()

{

   if (IsIconic())

   {

       CPaintDC dc(this); // device context for painting

       SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

       // Center icon in client rectangle

       int cxIcon = GetSystemMetrics(SM_CXICON);

       int cyIcon = GetSystemMetrics(SM_CYICON);

       CRect rect;

       GetClientRect(&rect);

       int x = (rect.Width() - cxIcon + 1) / 2;

       int y = (rect.Height() - cyIcon + 1) / 2;

       // Draw the icon

       dc.DrawIcon(x, y, m_hIcon);

   }

   else

   {

       CDialog::OnPaint();

   }

}

// The system calls this function to obtain the cursor to display while the user drags

//  the minimized window.

HCURSOR CplfDlg::OnQueryDragIcon()

{

   return static_cast<HCURSOR>(m_hIcon);

}

bool CplfDlg::CheckKey()

{

 for (int i=0; i< Key.GetLength();  i++)

   for (int j=0; j < Key.GetLength(); j++)

     if ((Key[i] == Key[j]) && (i != j))

       return false;

 return true;

}

void CplfDlg::OnBnClickedButton2()

{

   // TODO: Add your control notification handler code here

   UpdateData();

   clock_t start,finish;

   float time;

   if (this->text1.GetTextLength()==0)

       AfxMessageBox("Нету текста шифрования");

   else

   {    

       start=clock();

       if(!CheckKey())

       

           AfxMessageBox("В ключе имеются недопустимые символы");

       else

           text2.Clear();

       //rec1.Clear();

       if(radio1==true)

       {

           

           CreateR();

           EditText();

           Encrypt();

           //AfxMessageBox("Текст успешно зашифрован");

       }

       if(radio2==true)

       {

           Decrypt();

       }

       finish=clock();

       time=float(finish-start)/1000;

       this->tClock=time;

   }

UpdateData(false);

}

void CplfDlg::OnBnClickedRadio1()

{

   rec1.Clear();

   text2.Clear();

   radio1=true;

   radio2=false;

   button4.EnableWindow(false);

   progressbar.SetPos(0);

   //UpdateData(false);

}

void CplfDlg::OnBnClickedRadio2()

{

   radio1=false;

   radio2=true;

   rec1.Clear();

   text2.Clear();

   button4.EnableWindow(false);

   progressbar.SetPos(0);

   //UpdateData(false);

}

void CplfDlg::OnBnClickedButton3()

{

   text1.Clear();

   UpdateData(false);

}

void CplfDlg::OnBnClickedButton5()

{

   MyText = ResText;

   UpdateData(false);

}

void CplfDlg::CreateR()

{

   CString T;

   S = Key;

   CString Alphabet = Al;

   rec1.Clear();

   for(int i=0; i<Key.GetLength(); i++){

       for(int j = 0; j<Alphabet.GetLength(); j++){

           if(Key[i]==Alphabet[j])

           //Alphabet=Alphabet.Delete(j,1);

           Alphabet.Delete(j,1);

           //T = Alphabet;

           

                   }}

   S+=Alphabet;

   int num=0;

   CString Str="";

   R="";

     for (int i=0; i<10; i++)

           {

           Str = "";

           for (int j=0; j<16; j++)

           {

            Str += S[num];

           if (j != 16)

               Str += " ";

           num++;

       }

           

           R+=Str+"\n";

 }

      

 num = 0;

 for (int i=0; i<10; i++)

   for (int j=0; j<16; j++)

   {

     Resh[i][j]=S[num];

     num++;

   }

UpdateData(false);

}

void CplfDlg::ChoosePust()

{

 int k = 0;

 int m = 1000;

 for (int i=1; i<=S.GetLength(); i++)

 {

     for (int j=1; j<=MyText.GetLength(); j++)

     if (S[i] == MyText[j])

       k++;

   if (k<m)

   {

     m = k;

     k = 0;

     Pust = S[i];

   }

 }

 UpdateData(false);

}

void CplfDlg::EditText()

{

 ChoosePust();   

 //CString L="";

 for (int i=1; i<MyText.GetLength(); i++)

   if (MyText[i] == MyText[i+1])

       MyText.Insert(i+1, Pust);

       //L=MyText;

 int Len = MyText.GetLength();

 if (Len % 2 != 0)

   MyText += Pust;

 //MyText=L;

//UpdateData();

}

void CplfDlg::Encrypt()

{

  ResText = "";

  progressbar.SetPos(0);

  progressbar.SetRange(0, MyText.GetLength());

  

  int ind_x1 = 0;

  int ind_y1 = 0;

  int ind_x2 = 0;

  int ind_y2 = 0;

  int k = 0;

  while (k<text1.GetWindowTextLengthA())

  {

     for (int i=0; i<10; i++)

       for (int j=0; j<16; j++)

       {

         if (MyText[k] == Resh[i][j])

         {

           ind_x1 = i;

           ind_y1 = j;

         }

         if (MyText[k+1] == Resh[i][j])

         {

           ind_x2 = i;

           ind_y2 = j;

         }

       }

    if (ind_x1 == ind_x2)

    {

       if (ind_y1 == 15)

       {

         ResText += Resh[ind_x1][0];

         ResText += Resh[ind_x2][ind_y2+1];

       }

       else

       if (ind_y2 == 15)

       {

         ResText += Resh[ind_x1][ind_y1+1];

         ResText += Resh[ind_x2][0];

       }

       else

       {

         ResText += Resh[ind_x1][ind_y1+1];

         ResText += Resh[ind_x2][ind_y2+1];

       }

    }

    if (ind_y1 == ind_y2)

    {

       if (ind_x1 == 9)

       {

         ResText += Resh[0][ind_y1];

         ResText += Resh[ind_x2+1][ind_y2];

       }

       else

       if (ind_x2 == 9)

       {

         ResText += Resh[ind_x1+1][ind_y1];

         ResText += Resh[0][ind_y2];

       }

       else

       {

         ResText += Resh[ind_x1+1][ind_y1];

         ResText += Resh[ind_x2+1][ind_y2];

       }

    }

    if ((ind_x1 != ind_x2) && (ind_y1 != ind_y2))

    {

      ResText += Resh[ind_x1][ind_y2];

      ResText += Resh[ind_x2][ind_y1];

    }

    k = k + 2;

    

    

    progressbar.SetPos(MyText.GetLength());

  }

  this->text2.SetWindowTextA(ResText);

  //Form1->Label3->Caption = Form1->Memo2->Text.Length();

 

  button4.EnableWindow(true);

 AfxMessageBox("Текст успешно зашифрован");

}

void CplfDlg::Decrypt()

{

  ResText = "";

  progressbar.SetPos(0);

  progressbar.SetRange(0, MyText.GetLength());

 

  int ind_x1 = 0;

  int ind_y1 = 0;

  int ind_x2 = 0;

  int ind_y2 = 0;

  int k = 0;

  while (k<MyText.GetLength())

  {

     for (int i=0; i<10; i++)

       for (int j=0; j<16; j++)

       {

         if (MyText[k] == Resh[i][j])

         {

           ind_x1 = i;

           ind_y1 = j;

         }

         if (MyText[k+1] == Resh[i][j])

         {

           ind_x2 = i;

           ind_y2 = j;

         }

       }

    

    if (ind_x1 == ind_x2)

    {

       if (ind_y1 == 0)

       {

         ResText += Resh[ind_x1][15];

         ResText += Resh[ind_x2][ind_y2-1];

       }

       else

       if (ind_y2 == 0)

       {

         ResText += Resh[ind_x1][ind_y1-1];

         ResText += Resh[ind_x2][15];

       }

       else

       {

         ResText += Resh[ind_x1][ind_y1-1];

         ResText += Resh[ind_x2][ind_y2-1];

       }

    }

    

    if (ind_y1 == ind_y2)

    {

       if (ind_x1 == 0)

       {

         ResText += Resh[9][ind_y1];

         ResText += Resh[ind_x2-1][ind_y2];

       }

       else

       if (ind_x2 == 0)

       {

         ResText += Resh[ind_x1-1][ind_y1];

         ResText += Resh[9][ind_y2];

       }

       else

       {

         ResText += Resh[ind_x1-1][ind_y1];

         ResText += Resh[ind_x2-1][ind_y2];

       }

    }

    

    if ((ind_x1 != ind_x2) && (ind_y1 != ind_y2))

    {

      ResText += Resh[ind_x1][ind_y2];

      ResText += Resh[ind_x2][ind_y1];

    }

    k = k + 2;

   

  }

  //progressbar.StepIt(2);

 

  this->text2.SetWindowTextA(ResText);

  //Form1->Label3->Caption = Form1->Memo2->Text.Length();

 

  button4.EnableWindow(true);

 AfxMessageBox("Текст успешно зашифрован");

}

void CplfDlg::OnEnChangeRichedit22()

{

   UpdateData();

   this->len1=this->text1.GetTextLength();

   UpdateData(false);

}

void CplfDlg::OnEnChangeRichedit23()

{

   UpdateData();

   this->len2=this->text2.GetTextLength();

   UpdateData(false);

}


 

А также другие работы, которые могут Вас заинтересовать

18490. УТВОРЕННЯ ТА ЛІКВІДАЦІЯ СТРАХОВИХ КОМПАНІЙ 351.5 KB
  ТЕМА 1. УТВОРЕННЯ ТА ЛІКВІДАЦІЯ СТРАХОВИХ КОМПАНІЙ 1. Організаційні форми страховиків в Україні Страховики страхова компанія страхове товариство – суб'єкти страхування страхового ринку котрі відповідно до отриманої ліцензії беруть на себе зобов'язання за пев...
18491. ОПЛАТА ПРАЦІ І МАТЕРІАЛЬНЕ СТИМУЛЮВАННЯ В СТРАХОВИХ КОМПАНІЯХ 71.5 KB
  ТЕМА 3. ОПЛАТА ПРАЦІ І МАТЕРІАЛЬНЕ СТИМУЛЮВАННЯ В СТРАХОВИХ КОМПАНІЯХ План Загальна характеристика систем оплати праці в страхових компаніях. Оплата праці і матеріальне стимулювання в страховій компанії. 2.1. Традиційні системи оплати пра
18492. ЕКОНОМІЧНИЙ МЕХАНІЗМ СТРАХОВОЇ КОМПАНІЇ 139.5 KB
  ТЕМА 4. ЕКОНОМІЧНИЙ МЕХАНІЗМ СТРАХОВОЇ КОМПАНІЇ План Поняття про економічний механізм страхової компанії. Формування страхових резервів і управління страховою компанією. Класифікація витрат на утримання страхової компанії. Поняття про собівартість ...
18493. СТАТУТНИЙ КАПІТАЛ СТРАХОВОЇ КОМПАНІЇ, ЙОГО УТВОРЕННЯ ТА ВИКОРИСТАННЯ 89.5 KB
  ТЕМА 5. СТАТУТНИЙ КАПІТАЛ СТРАХОВОЇ КОМПАНІЇ ЙОГО УТВОРЕННЯ ТА ВИКОРИСТАННЯ План Утворення статного капіталу його призначення та використання. Порядок збільшення і зменшення статутного капіталу. Інвестування коштів статутного капіталу. Повернення ...
18494. ЦІНА СТРАХОВОГО ПРОДУКТУ І ГРОШОВІ НАДХОДЖЕННЯ СТРАХОВОЇ КОМПАНІЇ 312 KB
  ТЕМА 6. ЦІНА СТРАХОВОГО ПРОДУКТУ І ГРОШОВІ НАДХОДЖЕННЯ СТРАХОВОЇ КОМПАНІЇ План 1.Страховий тариф як ціна страхового продукту. 2.Страховий тарифнетто і навантаження та їх призначення. 3. Сутність грошових надходжень страховиків та їх класифікація. ...
18495. Страхові технічні резерви, їх склад та порядок формування 194 KB
  Тема 3. Лекція 3. Страхові технічні резерви їх склад та порядок формування План. Поняття страхових технічних резервів та їх склад. Порядок формування резерву незаробленої премії. Порядок формування резервів збитків. Порядок формування резерву коливань зб
18496. Резерви зі страхування життя 62.5 KB
  Тема 4. Резерви зі страхування життя І. Поняття резервів зі страхування життя та їх склад 2. Законодавчі вимоги до резервів зі страхування життя. 3. Принципи розрахунку резервів довгострокових зобов`язань. 4. Резерви належних виплат страхових сум. І. Поняття ре
18497. ІНВЕСТИЦІЙНІ ОПЕРАЦІЇ В СТРАХОВИХ КОМПАНІЯХ 122 KB
  ТЕМА 8. ІНВЕСТИЦІЙНІ ОПЕРАЦІЇ В СТРАХОВИХ КОМПАНІЯХ План 1.Джерела інвестиційних операцій. 2.Напрями інвестування галузей економіки за рахунок коштів страхових резервів. 3.Інвестиційна діяльність та формування портфеля інвестицій страховика 4.Доходи від інв
18498. ОПОДАТКУВАННЯ СТРАХОВИХ КОМПАНІЙ 449.5 KB
  ТЕМА 10 ОПОДАТКУВАННЯ СТРАХОВИХ КОМПАНІЙ План 1.Види податків які сплачують страхові компанії. 2.Характеристика ділової системи оподаткування страхових компаній. 3.Податок з прибутку страхових компаній. 4. Інші податки і порядок їх сплати страховими компанія...