Разработка программы для подсчета хэш-суммы файла и текста с графическим интерфейсом

 

Введение


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

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

Такие преобразования также называются хэш-функциями или функциями свёртки, а их результаты называют хэшем <#"justify">Глава 1. Описание алгоритма MD5


1.1 История MD5


MD5 - один из серии алгоритмов по построению дайджеста сообщения <#"center">хэширование delphi calc интерфейс


1.2 Однонаправленные хэш-функции


Однонаправленная функция H(M) применяется к сообщению произвольной длины M и возвращает значение фиксированной длины h.


h = H(M)


где h имеет длину m

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

Зная М, легко вычислить h.

Зная Н, трудно определить М, для которого H(M) =h.

Зная М, трудно определить другое сообщение M, для которого


H(M) = Н(М)


Нелегко построить функцию, вход которой имеет произвольный размер, а тем более сделать ее однонаправленной. В реальном мире однонаправленные хэш-функции строятся на идее функция сжатия. Такая однонаправленная функция выдает хэш-значение длины n при заданных входных данных большей длины m. Входами функции сжатия являются блок сообщения и выход предыдущего блока текста. Выход представляет собой хэш-значение всех блоков до этого момента. То есть, хэш-значение блока Мi равно

=f(Mi, hi-1)



Это хэш-значение вместе со следующим блоком сообщения становится следующим входом функции сжатия. Хэш-значением всего сообщения является хэш-значение последнего блока.

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


1.3 Описание алгоритма


Существует множество алгоритмов хэширования с различными характеристиками (разрядность <#"justify">MD5 - это улучшенная версия MD4. Хотя она сложнее MD4, их схемы похожи, и результатом MD5 также является 128-битовое хэш-значение.

После некоторой первоначальной обработки MD5 обрабатывает входной текст 512-битовыми блоками, разбитыми на 16 32-битовых подблоков. Выходом алгоритма является набор из четырех 32-битовых блоков, которые объединяются в единое 128-битовое хэш-значение. Во первых, сообщение дополняется так, чтобы его длина была на 64 бита короче числа, кратного 512. Этим дополнением является 1, за которой вплоть до конца сообщения следует столько нулей, сколько нужно . Затем, к результату добавляется 64-битовое представление длины сообщения (истинной, до дополнения). Эти два действия служат для того, чтобы длина сообщения была кратна 512 битам (что требуется для оставшейся части алгоритма), и чтобы гарантировать, что разные сообщения не будут выглядеть одинаково после дополнения. Инициализируются четыре переменных:


А = Ox01234567

В = Ox89abcdef

С = Oxfedcba98= Ox76543210


Они называются переменными сцепления.

Теперь перейдем к основному циклу алгоритма. Этот цикл продолжается, пока не исчерпаются 512-битовые блоки сообщения. Четыре переменных копируются в другие переменные: A в a, B в b, C в c и D в d.

Главный цикл состоит из четырех очень похожих этапов (у MD4 было только три этапа). На каждом этапе 16 раз используются различные операции. Каждая операция представляет собой нелинейную функцию над тремя из а, b, с и d. Затем она добавляет этот результат к четвертой переменной, подблоку текста и константе. Далее результат циклически сдвигается вправо на переменное число битов и добавляет результат к одной из переменных а, Ь, с и d. Наконец результат заменяет одну из переменных а, b, с и d. Существуют четыре нелинейных функции, используемые по одной в каждой операции (для каждого этапа - другая функция).


Рис. 0. Главный цикл MD5


Рис. 2. Одна операция MD5


F(X,Y,Z) = (X Ù Y) Ú ((ØX) Ù Z)

G(X,Y,Z) = (X Ù Z) Ú (Y Ù (ØZ))(X,Y,Z) = X Å Y Å Z(X,Y,Z) = Y Å (X Ú (ØZ))

(Å - это XOR, Ù - AND, Ú - OR, а Ø - NOT.)


Эти функции спроектированы так, чтобы, если соответствующие биты X, Y и Z независимы и не смещены, каждый бит результата также был бы независимым и несмещенным. Функция F - это побитовое условие: если X, то Y, иначе Z. Функция H - побитовая операция четности.

Если Mj обозначает j-ый подблок сообщения (от 0 до 15), а <<<s обозначает циклический сдвиг влево на s битов, то используются следующие четыре операции:


FF(a,b,c,d,Mj,s,ti) означает a = b + ((a + F(b,c,d) + Mj + ti) <<<s)(a,b,c,d,Mj,s,ti) означает a = b + ((a + G(b,c,d) + Mj + ti) <<<s)(a,b,c,d,Mj,s,ti) означает a = b + ((a + H(b,c,d) + Mj + ti) <<<s)(a,b,c,d,Mj,s,ti) означает a = b + ((a + I(b,c,d) + Mj + ti) <<<s)


Четыре этапа (64 действия выглядят следующим образом):


Этап 1:(a, b, c, d, M0, 7, 0xd76aa478)(d, a, b, c, M1, 12, 0xe8c7b756)(c, d, a, b, M2, 17, 0x242070db)(b, c, d, a, M3, 22, 0xc1bdceee)(a, b, c, d, M4, 7, 0xf57c0faf)(d, a, b, c, M5, 12, 0x4787c62a)(c, d, a, b, M6, 17, 0xa8304613)(b, c, d, a, M7, 22, 0xfd469501)(a, b, c, d, M8, 7, 0x698098d8)(d, a, b, c, M9, 12, 0x8b44f7af)(c, d, a, b, M10, 17, 0xffff5bb1)(b, c, d, a, M11, 22, 0x895cd7be)(a, b, c, d, M12, 7, 0x6b901122)(d, a, b, c, M13, 12, 0xfd987193)(c, d, a, b, M14, 17, 0xa679438e)(b, c, d, a, M15, 22, 0x49b40821)


Этап 2:(a, b, c, d, M1, 5, 0xf61e2562)(d, a, b, c, M6, 9, 0xc040b340)(c, d, a, b, M11, 14, 0x265e5a51)(b, c, d, a, M0, 20, 0xe9b6c7aa)(a, b, c, d, M5, 5, 0xd62fl05d)(d, a, b, c, M10, 9, 0x02441453)(c, d, a, b, M15, 14, 0xd8ale681)(b, c, d, a, M4, 20, 0xe7d3fbc8)(a, b, c, d, M9, 5, 0x2,lelcde6)(d, a, b, c, M14, 9, 0xc33707d6)(c, d, a, b, M3, 14, 0xf4d50d87)(b, c, d, a, M8, 20, 0x455al4ed)(a, b, c, d, M13, 5, 0xa9e3e905)(d, a, b, c, M2, 9, 0xfcefa3f8)(c, d, a, b, M7, 14, 0x676f02d9)(b, c, d, a, M12, 20, 0x8d2a4c8a)


Этап 3:(a, b, c, d, M5, 4, 0xfffa3942)(d, a, b, c, M8, 11, 0x8771f681)(c, d, a, b, M11, 16, 0x6d9d6122)(b, c, d, a, M14, 23, 0xfde5380c)(a, b, c, d, M1, 4, 0xa4beea44)(d, a, b, c, M4, 11, 0x4bdecfa9)(c, d, a, b, M7, 16, 0xf6bb4b60)(b, c, d, a, M10, 23, 0xbebfbc70)(a, b, c, d, M13, 4, 0x289b7ec6)(d, a, b, c, M0, 11, 0xeaa127fa)(c, d, a, b, M3, 16, 0xd4ef3085)(b, c, d, a, M6, 23, 0x04881d05)(a, b, c, d, M9, 4, 0xd9d4d039)(d, a, b, c, M12, 11, 0xe6db99e5)(c, d, a, b, M15, 16, 0x1fa27cf8)(b, c, d, a, M2, 23, 0xc4ac5665)


Этап 4:(a, b, c, d, M0, 6, 0xf4292244)(d, a, b, c, M7, 10, 0x432aff97)(c, d, a, b, M14, 15, 0xab9423a7)(b, c, d, a, M5, 21, 0xfc93a039)(a, b, c, d, M12, 6, 0x655b59c3)(d, a, b, c, M3, 10, 0x8f0ccc92)(c, d, a, b, M10, 15, 0xffeff47d)(b, c, d, a, M1, 21, 0x85845ddl)(a, b, c, d, M8, 6, 0x6fa87e4f)(d, a, b, c, M15, 10, 0xfe2ce6e0)(c, d, a, b, M6, 15, 0xa3014314)(b, c, d, a, M13, 21, 0x4e081lal)(a, b, c, d, M4, 6, 0xf7537e82)(d, a, b, c, M11, 10, 0xbd3af235)(c, d, a, b, M2, 15, 0x2ad7d2bb)(b, c, d, a, M9, 21, 0xeb86d391)


Эти константы, ti, выбирались следующим образом:

На i-ом этапе ti является целой частью 232*abs(sin(i)), где i измеряется в радианах.

После всего этого a, b, c и d добавляются к A, B, C и D, соответственно, и алгоритм продолжается для следующего блока данных. Окончательным результатом служит объединение A, B, C и D.


1.4 Безопасность MD5


Рон Ривест привел следующие улучшения MD5 в сравнении с MD4:

  1. Добавился четвертый этап.
  2. Теперь в каждом действии используется уникальная прибавляемая константа.
  3. Функция G на этапе 2 с ((XÙY)Ú(XÙZ)Ú(YÙZ)) была изменена на (XÙZ)Ú(YÙ(ØZ)), чтобы сделать G менее симметричной.
  4. Теперь каждое действие добавляется к результату предыдущего этапа. Это обеспечивает более быстрый лавинный эффект.
  5. Изменился порядок, в котором использовались подблоки сообщения на этапах 2 и 3, чтобы сделать шаблоны менее похожими.
  6. Значения циклического сдвига влево на каждом этапе были приближенно оптимизированы для ускорения лавинного эффекта.
  7. Четыре сдвига, используемые на каждом этапе, отличаются от значений, используемых на других этапах.

Том Берсон (Tom Berson) попытался применить дифференциальный криптоанализ к одному этапу MD5, но его вскрытие не оказалось эффективным ни для одного из четырех этапов. Более успешное вскрытие ден Боера и Босселаерса, использующее функцию сжатия, привело к обнаружению столкновений в MD5 Само по себе это вскрытие невозможно для вскрытия MD5 в практических приложениях, оно не влияет и на использование MD5 в алгоритмах шифрования, подобных Luby-Rackoff.

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

Хотя справедливо, что "кажется, что у функции сжатия есть слабое место, но это практически не влияет на безопасность хэш-функции "



Глава 2. Описание программы, реализующей алгоритм MD5 на Delphi


2.1 Анализ технического задания и постановка задачи проектирования


Согласно заданию необходимо разработать программу вычисляющую хэш-код сообщения. Для решения поставленной задачи был выбран язык программирования Delphi, так как он является языком высокого уровня и позволяет быстро и эффективно создавать приложения. Delphi - это продукт Borland International, высокопроизводительный инструмент визуального построения приложений включает в себя настоящий компилятор кода и предоставляет средства визуального программирования, несколько похожие на те, что можно обнаружить в Microsoft Visual Basic или в других инструментах визуального проектирования. В основе Delphi лежит язык Object Pascal, который является расширением объектно-ориентированного языка Pascal.

Преимущества Delphi по сравнению с аналогичными программными продуктами.

быстрота разработки приложения;

высокая производительность разработанного приложения;

низкие требования разработанного приложения к ресурсам компьютера;

наращиваемость за счет встраивания новых компонент и инструментов в среду Delphi;

возможность разработки новых компонент и инструментов собственными средствами Delphi (существующие компоненты и инструменты доступны в исходных кодах);

удачная проработка иерархии объектов.

Система программирования Delphi рассчитана на программирование различных приложений и предоставляет большое количество компонентов для этого.

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

.Разработка визуального интерфейса пользователя, на основе экранных форм среды Delphi и визуальных компонент.

.Разработка обработчиков событий от элементов экранных форм, разработка алгоритмов и программных кодов действий.


2.2 Разработка экранных форм программы


В Windows основной элемент пользовательского интерфейса - форма. В Delphi каждый проект имеет, по крайней мере, одно окно - главное окно приложения. Все окна в Delphi основаны на объекте TForm. Формы имеют свои свойства, события и методы, при помощи которых мы можем управлять видом и поведением формы. Форма, это обычный компонент Delphi, но в отличие от других, её нет на панели компонентов. В данном проекте используются 2 формы



- f_main (основная форма)


- f_info (форма «О программе», содержит информацию о программе, версию продукта, ФИО разработчика)


Список и назначение основных компонентов, расположенных на главной форме f_main:

-Label. Этот компонент используется для отображения различных надписей на формах. Основное свойство для этого компонента -Caption. Именно оно и отвечает за надпись на компоненте.

-Edit. Представляет собой однострочное текстовое поле, служащее для ввода данных пользователем. Основным свойством компонента, передающим введённую информацию, является свойство Edit1.Text типа String. На главной форме программы расположено два таких компонента e_file (предназначен для ввода полного пути к файлу, для которого необходимо вычислить хэш) и e_text (необходим для ввода текста, для которого так же нужно вычислить хэш).

-RzToolbar. Это панель, которая управляет компоновкой инструментальных быстрых кнопок и других компонентов.


Введение В настоящее время с хэшированием мы сталкиваемся практически на каждом шагу: при работе с веб браузером, различными компиляторами, текстовыми ре

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ