На вход алгоритма поступает входной поток данных, хеш которого необходимо найти. Длина сообщения может быть любой (в том числе нулевой). Запишем длину сообщения в L. Это число целое и неотрицательное. Кратность каким-либо числам необязательна. После поступления данных идёт процесс подготовки потока к вычислениям.
Ниже приведены 5 шагов алгоритма:
Шаг 1. Выравнивание потока.
Шаг 2. Добавление длины сообщения.
Шаг 3. Инициализация буфера.
Шаг 4. Вычисление в цикле.
Шаг 5. Результат вычислений.
1.3 Выбор платформы и языка разработки приложения
Перед началом разработки был произведен анализ требований к программному обеспечению, результаты которого были преобразованы в требования к платформе разработки:
простота организации и программирования пользовательского интерфейса;
возможность работать на компьютерах с версией ОС WindowsХР и выше;
возможность работы с файловой системой Windows;
возможность работы с математическими операциями.
В результате было принято решение разрабатывать приложение на основе технологии .NET, т.к. она является «родной» для операционных систем семейства Windows и позволяет работать с файловой системой. .NET Framework — программная технология от компании Microsoft, платформа для создания и развертывания приложений. Она предоставляет высокопроизводительную, основанную на стандартах, многоязыковую среду, которая позволяет интегрировать существующие приложения с приложениями и сервисами следующего поколения, а также решать задачи развертывания и использования интернет-приложений. .NET Framework состоит из трех основных частей - общеязыковой среды выполнения, иерархического множества унифицированных библиотек классов и компонентной версии ASP, называемой ASP.NET. Т.к. при работе с платформой . NET существует возможность работать с несколькими языками программирования выбор был сделан в пользу языка C#, как наиболее распространенного и развитого языка разработки приложений.
Необходимо упомянуть также о возможности визуальной разработки программного обеспечения, которую предоставляет платформа .NET. Очевидно, что упрощение создания пользовательского интерфейса позволит уделить больше внимания функциональной полноте разрабатываемой программы.
1.4 Функциональные возможности разрабатываемого программного обеспечения
Основываясь на правиле, что для программного обеспечения первичным является выполнение им необходимых функций, выделим основные действия, которые должна выполнять разрабатываемая программа:
отображение носителей информации подключенных к ОС;
отображение параметров нужного носителя информации;
формирование и вывод контрольной суммы кластеров;
проверку контрольной суммы кластеров.
Таким образом, каждая из вышеперечисленных функций должна быть реализована для выполнения задания к курсовому проекту. Очевидно, что описанные функции являются каркасом приложения, которое также должно отвечать следующим требованиям: минимальные аппаратные требования, интуитивность пользовательского интерфейса и удобство работы с ним, корректность работы в исключительных ситуациях.
2.1 Логическая структура интерфейса пользователя
Для построения приложения, которое реализовывает предполагаемый функционал и приспособлено к работе с конечным пользователем было принято решения о распределении логически-функциональной нагрузки между несколькими окнами приложения. Это обусловлено тем, что нагромождение всех возможных настроек, функций и информационных блоков в одном окне приводит перегрузке интерфейса и неудобству работы с приложением.
Для организации интерфейса разработана следующая структура окон программы:
1. Основное окно программы – список для вывода подключенных устройств памяти, а также выбора между ними, текстовое поле выводящее информацию о выбранном устройстве, кнопка анализа, текстовое поле хранящее информацию не зависимо от выбора, для сравнения, кнопка проверки алгоритмов.
2. Окно проверки алгоритмов – имеет 2 кнопки для запуска нужного алгоритма, 2 текстовых поля для вывода результатов подсчета, по одному на каждый алгоритм и по одному поля для ввода информации.
Навигация между окнами производиться стандартными средствами Windows, а также кнопки проверки алгоритмов.
2.2 Программная организация отображения информации об устройствах памяти и контрольных сумм
Учитывая тот факт, что файловая система ОС Windows является иерархической базой данных, объем которой достаточно велик, необходимо использовать промежуточные программные средства для хранения и отображения пользователю информации о ней.
Для этой цели в рамках разрабатываемого приложения был создан класс HardDrive. Данный класс упрощает как хранение информации, так и отображение ее на экране в виде, удобном для пользователя. Условно класс HardDrive хранит структуру объектов, каждый из которых может иметь неограниченное число дочерних узлов. Также стоит указать, что для изменения атрибутов файла в программе использовался класс File из библиотеки .NET.
2.3 Структурная декомпозиция функций разрабатываемого программного обеспечения
Для реализации функциональных возможностей приложения, описанных в пункте 1.3 были описан набор программных функций, реализуемых приложением. Большинство из этих функций были описаны в классе основного окна приложения. Далее приведены декларации этих функций с описанием действий, которые они выполняют:
- privatevoidForm1_Load(objectsender, EventArgse) – функция вызывающаяся при загрузки программы, вызывает окно спрашивающие, действительно ли пользователь хочет считать информация и запускает функции взятия информации и добавления ее в список.
- private void GetHardDiskInfo() – функция считывания информации о запоминающем устройстве.
- private void AddHDDItemToListview() – функция добавляющая в список подключенные запоминающие устройства.
- private void AddItemToListview(ListViewGroup GroupName, int IndexNumber, string ItemName, int ImageIndex, string ItemTAG) – функциядобавляющаяинформациювструктуру HardDrive.
- private void WriteHDDText() – функция добавляющая информацию о запоминающем устройстве в текстовое поле.
- privatevoidlistView1_SelectedIndexChanged(objectsender, EventArgse) – функция определяющая какое устройство пользователь выбрал в списке.
- privatevoidbutton1_Click(objectsender, EventArgse) – функция определяющая действие при нажатии кнопки «Анализ».
- privatevoidbutton2_Click(objectsender, EventArgse) – функция определяющая действие при нажатии кнопки «Проверить алгоритм».
- privatevoidbutton1_Click(objectsender, EventArgse) – функция определяющая действие при нажатии кнопки «CRC32».
- publicstaticuintCalculateCRC(System.IO.Streamstream) – функция запускающая формирование контрольной суммы CRC32.
- privatevoidbutton2_Click(objectsender, EventArgse) – функция определяющая действие при нажатии кнопки «MD5».
Также созданы функции по формированию контрольной суммы MD5, перечисленные ниже:
- private static void FF(ref UInt32 a, UInt32 b, UInt32 c, UInt32 d, UInt32 mj, int s, UInt32 ti)
- private static void GG(ref UInt32 a, UInt32 b, UInt32 c, UInt32 d, UInt32 mj, int s, UInt32 ti)
- private static void HH(ref UInt32 a, UInt32 b, UInt32 c, UInt32 d, UInt32 mj, int s, UInt32 ti)
- private static void II(ref UInt32 a, UInt32 b, UInt32 c, UInt32 d, UInt32 mj, int s, UInt32 ti)
- private static void MD5_Init()
Описанные выше декларации функций отображают внутреннюю организацию приложения на уровне конкретных действий. Вызов этих функций в приложении не будет прямым, а будет производиться в функциях-обработчиках событий от конкретных компонентов пользовательского интерфейса. Это обусловлено тем, что пользователь напрямую не работает с файловой системой, а обращается к информации дерева класса HardDrive.
3. РЕАЛИЗАЦИЯ ПРОГРАММЫ
Приложение, которое является результатом курсового проектирования было реализовано на языке С# платформы .NET. При написании программы был использован объектно-ориентированный подход: были созданы и описаны два класса, каждый из которых включает в себя поведение одного из окон программы – Form1, Form2, а также диалоговое окно MessageBox спрашивающее разрешение пользователя на доступ программы к данным.
MessageBoxреализует отображение окна с подтвеждением, на здоступ приложением к информации. Вид окна представлен на рисунке 3.1.
Рисунок 3.1 – Вид диалогового окна подтверждения
MessageBox имеют очень простую программную реализацию, которая не предполагает дополнительных объяснений, поэтому его код не описывается в пояснительной записке.
2.4 Программная реализация класса Form1
Класс Form1 описывает поведение основного окна приложения, внешний вид которого представлен на рисунке 3.2.
Как видно на рисунке 3.2, основное окно разработанного приложения Контрольная сумма включает в себя следующие элементы:
- список подключенных устройств хранения данных, реализуемый объектом HDDGroup. С помощью списка производится выбор устройства;
- текстовое поле отображения информации, реализуемое объектом richTextBox1;
- текстовое поле отображения информации для проверки и сравнения, реализуемое объектом richTextBox2;
- кнопку для анализа (Анализ);
- кнопку запуска и проверки алгоритмов (Проверить алгоритм);
- стандартные элементы управления окном в ОС семейств Windows.
Рисунок 3.2 – Внешний вид главного окна приложения
Конструктор, обработчики событий и члены класса Form1
Инициализация объектов-членов класса Form1 осуществляется в конструкторе класса. Ниже приведен код конструктора с комментариями:
public Form1() {
//инициализация компонента – необходима для создания окна
InitializeComponent();