на тему рефераты
 
Главная | Карта сайта
на тему рефераты
РАЗДЕЛЫ

на тему рефераты
ПАРТНЕРЫ

на тему рефераты
АЛФАВИТ
... А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я

на тему рефераты
ПОИСК
Введите фамилию автора:


Курсовая работа: Разработка программы "Формирование и проверка контрольной суммы кластеров"


public Form2() {

//инициализация компонента – необходима для создания окна

 InitializeComponent();

}

Также несколько методов класса Form2, код которого приведен в приложении являются обработчиками событий: нажатие кнопки, работа с информацией.

Программная реализация обработчика сообщений private void button1_Click(object sender, EventArgs e)

Определяет действие при нажатии кнопки «CRC32». Код обработчика приведен ниже.

private void button1_Click(object sender, EventArgs e)

 { // Читаем

 System.IO.FileStream stream1 = System.IO.File.OpenRead(textBox1.Text.ToString());

 textBox3.Text=(string.Format("{0:X}", CalculateCRC(stream1))).ToString();}

Программная реализация функции public static uint CalculateCRC(System.IO.Stream stream)

Данная функция реализует алгоритм формирования контрольной суммы CRC32. Код функции приведен ниже с комментариями.

public static uint CalculateCRC(System.IO.Stream stream)

                   {        const int buffer_size = 1024;

                            const uint POLYNOMIAL = 0xEDB88320;

                            uint result = 0xFFFFFFFF;

                            uint Crc32;

                            byte[] buffer = new byte[buffer_size];

                            uint[] table_CRC32 = new uint[256];

                            unchecked

                            {        // Инициалиазация таблицы

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

                                      {        Crc32 = (uint)i;

                                               for (int j = 8; j > 0; j--)

                                               { if ((Crc32 & 1)==1)

                                               Crc32 = (Crc32 >> 1) ^ POLYNOMIAL;

                                               else

                                               Crc32 >>= 1; }

                                               table_CRC32[i] = Crc32; }

                                      // Чтение из буфера

                                     int count = stream.Read(buffer, 0, buffer_size);

                                      // Вычисление CRC

                                      while (count > 0)

                                      { for (int i = 0; i < count; i++)

                                               { result = ((result) >> 8)

                                                        ^ table_CRC32[(buffer[i])

                                                        ^ ((result) & 0x000000FF)];   }

                                               count = stream.Read(buffer, 0, buffer_size); } }

                            return ~result; }

Программная реализация обработчика сообщений private void button2_Click(object sender, EventArgs e)

Определяет действие при нажатии кнопки «проверка MD5». Также мостит в себе алгоритм формирования контрольной суммы MD5 и все прилагающие функции. Код из-за большого объема не описывается, его можно просмотреть в общем коде программы в Приложении Б.


3. ТЕСТИРОВАНИЕ ПРОГРАММЫ И РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

3.1 Тестирование программы

В ходе выполнения задания курсового проектирования было проведено тестирование результирующего программного продукта.

В результате тестирования программы были установлены как недостатки разработанных алгоритмов, так и несовершенство их программной реализации, как-то:

-  зависимость от прав администратора;

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

-  проблемы с прямым доступом, связанные с новыми введенными ограничениями в ОС Windows 7.

Обнаруженные недостатки были исправлены как на уровне алгоритма (если требовалось), так и на уровне программной реализации.

Также во время тестирования программы были определены минимальные требования к оборудованию и программному обеспечению для использования данного продукта:

ОС Windows XP, процессор Pentium IV 1 ГГц, ОЗУ 128 Мб, 100 KB свободного места на жестком диске, библиотека .NET Framework 4.0 и выше.

3.2 Руководство пользователя

После запуска программы на экране отображается окно со следующими элементами:

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

-  текстовое поле отображения информации об устройстве и контрольная сумма кластеров;

-  текстовое поле отображения информации для проверки и сравнения;

-  кнопка для анализа (Анализ), активирует второе текстовое поле;

-  кнопка запуска и проверки алгоритмов (Проверить алгоритм);

-  четыре текстовых поля для ввода и вывода информации проверки алгоритмов формирования контрольной суммы кластеров;

-  кнопка для запуска проверки алгоритма CRC32(проверить CRC32);

-  кнопка для запуска проверки алгоритма MD5 (проверить MD5);


ВЫВОДЫ

Во время выполнения задания были закреплены навыки использования функций библиотеки .NET Framework, углублены знания в языке C# и написании программ под ОС семейства Windows.

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

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

В результате выполнения курсового проекта было разработано приложение с использованием библиотеки .NET Framework – программа Формирования и проверки контрольной суммы клатеров.

Можно сказать, что поставленное при курсовом проектировании задание было реализовано полностью.

Недостатками результирующего программного средства являются:

-  недостаточная гармоничность и привлекательность графической составляющей проекта;

-  небольшие задержки при выполнении приложения на компьютерах с малым объемом оперативной памяти;

-  требования к предустановленном ПО (в частности .NET Framework 4.0)

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


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

1. CLR via C#. Программирование на платформе Microsoft .NET Framework 2.0 на языке C#. Мастер-класс./ Пер. с англ. – М.: Издательство «Русская редакция»; СПб.: Питер, 2007. – 656 с.

2. С# в подлиннике: Пер. с англ./ Дейтел Х., Дейтел П., Листфиолд Дж., Нието Т., Йегер Ш., Златкина М. – СПб.Ж БХВ-Петербург, 2006. – 1056 с.

3. http://msdn.microsoft.com/

4. http://intuit.ru/

5. http://windxp.ru/

6. ДСТУ 3008-95 "ЗВІТИ У СФЕРІ НАУКИ І ТЕХНІКИ. Структура та правила оформлення".


ПРИЛОЖЕНИЕ А

Пример выполнения программы «Формирование и проверка контрольной суммы кластеров»

Рисунок 1 – Внишний вид диологового окна перед запуском сомой программы

Рисунок 2 – Внешний вид гланого окна программы


Рисунок 3 – Пример выполнения программы

Рисунок 4 – Пример выполнения проверки


ПРИЛОЖЕНИЕ Б

Код приложения «Формирование и проверка контрольной суммы кластеров»

//Form1.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Collections;

using System.Management;

using Microsoft.Win32;

namespace kurs_pogulyat

{

 public partial class Form1 : Form

 {

 public Form1()

 {

 InitializeComponent();

 }

 ArrayList hdCollection = new ArrayList();

 int Num_Hdd = 0;

 double TotalSize = 0;

 double TotalSpaceLeft = 0;

 bool analiz = false;

 bool OSXP = false;

 private void Form1_Load(object sender, EventArgs e)

 {

 if (MessageBox.Show("Start getting info ?\nThis may take a while, so please stand by.", "Notice", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No)

 {

 this.Close();

 }

 else

 {

 //AddGeneralinfoTolistview();

 GetHardDiskInfo();

 AddHDDItemToListview();

 }

 }

 

 private void GetHardDiskInfo()

 {

 #region HDD_Collction of Infomation

 hdCollection.Clear();

 Num_Hdd = 0;

 TotalSize = 0;

 TotalSpaceLeft = 0;

 ManagementObjectSearcher searcher = new

 ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");

 foreach (ManagementObject wmi_HD in searcher.Get())

 {

 HardDrive hd = new HardDrive();

 #region hd.Model

 try

 {

 hd.Model = wmi_HD["Model"].ToString();

 }

 catch (Exception)

 {

 hd.Model = "Unknown";

 }

 #endregion

 #region hd.Type

 try

 {

 hd.Type = wmi_HD["InterfaceType"].ToString();

 }

 catch (Exception)

 {

 hd.Type = "Unknown";

 }

 #endregion

 #region hd.BytesPerSector

 try

 {

 hd.BytesPerSector = wmi_HD["BytesPerSector"].ToString();

 }

 catch (Exception)

 {

 hd.BytesPerSector = "Unknown";

 }

 #endregion

 #region hd.MediaType

 try

 {

 hd.MediaType = wmi_HD["MediaType"].ToString();

 }

 catch (Exception)

 {

 hd.MediaType = "Unknown";

 }

 #endregion

 #region hd.Partitions

 try

 {

 hd.Partitions = wmi_HD["Partitions"].ToString();

 }

 catch (Exception)

 {

 hd.Partitions = "Unknown";

 }

 #endregion

 #region hd.SectorsPerTrack

 try

 {

 hd.SectorsPerTrack = wmi_HD["SectorsPerTrack"].ToString();

 }

 catch (Exception)

 {

 hd.SectorsPerTrack = "Unknown";

 }

 #endregion

 #region hd.Signature

 try

 {

 hd.Signature = wmi_HD["Signature"].ToString();

 }

 catch (Exception)

 {

 hd.Signature = "Unknown";

 }

 #endregion

 #region hd.size

 try

 {

 hd.Size = wmi_HD["Size"].ToString();

 }

 catch (Exception)

 {

 hd.Size = "0";

 }

 #endregion

 #region hd.Status

 try

 {

 hd.Status = wmi_HD["Status"].ToString();

 }

 catch (Exception)

 {

 hd.Status = "Unknown";

 }

 #endregion

 #region hd.TotalCylonders

 try

 {

 hd.TotalCylinders = wmi_HD["TotalCylinders"].ToString();

 }

 catch (Exception)

 {

 hd.TotalCylinders = "Unknown";

 }

 #endregion

 #region hd.TotalHeads

 try

 {

 hd.TotalHeads = wmi_HD["TotalHeads"].ToString();

 }

 catch (Exception)

 {

 hd.TotalHeads = "Unknown";

 }

 #endregion

 #region hd.TotalSectors

 try

 {

 hd.TotalSectors = wmi_HD["TotalSectors"].ToString();

 }

 catch (Exception)

 {

 hd.TotalSectors = "Unknown"; }

 #endregion

 #region hd.TotalTracks

 try

 {

 hd.TotalTracks = wmi_HD["TotalTracks"].ToString(); }

 catch (Exception)

 {

 hd.TotalTracks = "Unknown"; }

 #endregion

 #region hd.TracksPerCylinder

 try

 {

 hd.TracksPerCylinder = wmi_HD["TracksPerCylinder"].ToString(); }

 catch (Exception)

 {

 hd.TracksPerCylinder = "Unknown"; }

 #endregion

 #region hd.SeralNo

 if (OSXP != true)

 {

 try

 {

 hd.SerialNo = wmi_HD["SerialNumber"].ToString(); }

 catch (Exception)

 {

 hd.SerialNo = "Unknown";

 } }

 else

 { }

 #endregion

 #region hd.FirmwareRevision

 try

 {

 hd.FirmwareRevision = wmi_HD["FirmwareRevision"].ToString(); }

 catch (Exception)

 {

 hd.FirmwareRevision = " "; }

 #endregion

 hdCollection.Add(hd);

 hd = null;

 Num_Hdd = Num_Hdd + 1;

 TotalSize = TotalSize + double.Parse(wmi_HD["Size"].ToString());

 }

 #region //Getting HDD's serial under XP

 if (OSXP == true)

 {

 searcher = new

 ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");

 int i = 0;

 foreach (ManagementObject wmi_HD in searcher.Get())

 {

 // get the hard drive from collection

 // using index

 HardDrive hd = (HardDrive)hdCollection[i];

 // get the hardware serial no.

 if (wmi_HD["SerialNumber"] == null)

 hd.SerialNo = "None";

 else

 hd.SerialNo = wmi_HD["SerialNumber"].ToString();

 ++i;

 }

 }

 #endregion

 searcher = new

 ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk");

 foreach (ManagementObject wmi_HD in searcher.Get())

 {

 // get how much Freespace the HDD have left...

 if (wmi_HD["FreeSpace"] == null)

 {

 //do nothing

 }

 else

 {

 if (wmi_HD["DriveType"].ToString() == "3")

 {

 TotalSpaceLeft += double.Parse(wmi_HD["FreeSpace"].ToString());

 }

 }

 }

 // HDD_info_Done = true;

 searcher = null;

 #endregion

 }

 private void AddHDDItemToListview()

 {

 //Makes the Search group:::......

 ListViewGroup HDDGroup = new ListViewGroup();

 HDDGroup.Header = "HardDrive(s) :";

 HDDGroup.HeaderAlignment = HorizontalAlignment.Left;

 HDDGroup.Name = "HardDrive(s)";

 //Adds the search group...

 listView1.Groups.Add(HDDGroup);

 int i = 0;

 foreach (HardDrive x in hdCollection)

 {

 AddItemToListview(HDDGroup, i, x.Model.ToString(), 0, "1");

 i++; }

 HDDGroup = null; }

 private void AddItemToListview(ListViewGroup GroupName, int IndexNumber, string ItemName, int ImageIndex, string ItemTAG)

 {

 ListViewItem NewItem = new ListViewItem();

 ListViewItem.ListViewSubItem NewSubItem = new ListViewItem.ListViewSubItem();

 NewSubItem.Text = IndexNumber.ToString();

 NewSubItem.Name = "Subitem1";

 NewItem.SubItems.Add(NewSubItem);

 NewItem.SubItems.Add(NewSubItem);

 NewItem.Name = ItemName;

 NewItem.Text = ItemName;

 NewItem.Group = GroupName;

 NewItem.ImageIndex = ImageIndex;

 NewItem.Tag = ItemTAG;

 listView1.Items.Add(NewItem);

 NewItem = null;

 NewSubItem = null;

 // Group = null; }

 private void WriteHDDText()

 {

 HardDrive Hd = null;

 bool fail = false;

 try

 {

 Hd = (HardDrive)hdCollection[int.Parse(listView1.SelectedItems[0].SubItems[1].Text)]; }

 catch (Exception)

 {

 Hd = null;

 fail = true; }

 if (fail != true)

 {

 Hd = (HardDrive)hdCollection[int.Parse(listView1.SelectedItems[0].SubItems[1].Text)];

 double size_temp = double.Parse(Hd.Size);

 if (analiz == false)

 {

 richTextBox1.Clear();

 richTextBox1.Text = ("\n" +

 "Model:\n" +

 "--------------------------------------------------------\n" +

 "Model : " + Hd.Model.ToString() + "\n" +

 "Type : " + Hd.Type.ToString() + "\n" +

 "Serial No. : " + Hd.SerialNo.ToString() + "\n" +

 "Firmware Revision : " + Hd.FirmwareRevision.ToString() + "\n" +

 "\n" +

 "Characteristics:\n" +

 "--------------------------------------------------------\n" +

 "Media Type : " + Hd.MediaType.ToString() + "\n" +

 "Partitions : " + Hd.Partitions.ToString() + "\n" +

 "Signature : " + Hd.Signature.ToString() + "\n" +

 "Size : " + Hd.Size.ToString() + " Byte (" + Math.Round((((size_temp / 1024) / 1024) / 1024), 2) + " GB)" + "\n" +

 "\n" +

 "Status : " + Hd.Status.ToString() + "\n" +

 "\n" +

 "Tracks:\n" +

 "--------------------------------------------------------\n" +

 "Total Cylinders : " + Hd.TotalCylinders.ToString() + "\n" +

 "Total Heads : " + Hd.TotalHeads.ToString() + "\n" +

 "Total Sectors : " + Hd.TotalSectors.ToString() + "\n" +

 "Total Tracks : " + Hd.TotalTracks.ToString() + "\n" +

 "Bytes Pr. Sector : " + Hd.BytesPerSector.ToString() + "\n" +

 "Sector Pr. Tracks : " + Hd.SectorsPerTrack.ToString() + "\n" +

 "Tracks Pr. Cylinder : " + Hd.TracksPerCylinder.ToString() + "\n"

 ); }

 else

 {

 richTextBox2.Clear();

 richTextBox2.Text = ("\n" +

 "Model:\n" +

 "--------------------------------------------------------\n" +

 "Model : " + Hd.Model.ToString() + "\n" +

 "Type : " + Hd.Type.ToString() + "\n" +

 "Serial No. : " + Hd.SerialNo.ToString() + "\n" +

 "Firmware Revision : " + Hd.FirmwareRevision.ToString() + "\n" +

 "\n" +

 "Characteristics:\n" +

 "--------------------------------------------------------\n" +

 "Media Type : " + Hd.MediaType.ToString() + "\n" +

 "Partitions : " + Hd.Partitions.ToString() + "\n" +

 "Signature : " + Hd.Signature.ToString() + "\n" +

 "Size : " + Hd.Size.ToString() + " Byte (" + Math.Round((((size_temp / 1024) / 1024) / 1024), 2) + " GB)" + "\n" +

 "\n" +

 "Status : " + Hd.Status.ToString() + "\n" +

 "\n" +

 "Tracks:\n" +

 "--------------------------------------------------------\n" +

 "Total Cylinders : " + Hd.TotalCylinders.ToString() + "\n" +

 "Total Heads : " + Hd.TotalHeads.ToString() + "\n" +

 "Total Sectors : " + Hd.TotalSectors.ToString() + "\n" +

 "Total Tracks : " + Hd.TotalTracks.ToString() + "\n" +

 "Bytes Pr. Sector : " + Hd.BytesPerSector.ToString() + "\n" +

 "Sector Pr. Tracks : " + Hd.SectorsPerTrack.ToString() + "\n" +

 "Tracks Pr. Cylinder : " + Hd.TracksPerCylinder.ToString() + "\n"

 ); }

 size_temp = 0;

 }

 Hd = null;

 }

 private void listView1_SelectedIndexChanged(object sender, EventArgs e)

 {

 int selected_index;

 try

 {

 //MessageBox.Show(listView1.SelectedItems[0].Tag.ToString());

 selected_index = listView1.SelectedItems[0].Index;

 switch (listView1.SelectedItems[0].Tag.ToString())

 {

 case "1":

 WriteHDDText();

 break;

 } }

 catch (Exception)

 {

 //Do nothing

 } }

 private void button1_Click(object sender, EventArgs e)

 {

 if (analiz == false)

 analiz = true;

 else

 analiz = false;

 GetHardDiskInfo();

 WriteHDDText();

 }

 private void button2_Click(object sender, EventArgs e)

 {

 Form2 f2 = new Form2();

 f2.Show();

 }

 }

}

//Form2.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

using System.Collections;

namespace kurs_pogulyat

{

 public partial class Form2 : Form

 {

 public Form2()

 {

 InitializeComponent();

 }

 //CRC 32

 private void button1_Click(object sender, EventArgs e)

 {

 

 // Читаем файл test.txt

 System.IO.FileStream stream1 = System.IO.File.OpenRead(textBox1.Text.ToString());

                           

 textBox3.Text=(string.Format("{0:X}", CalculateCRC(stream1))).ToString();

 }

                   /// <summary>

                   /// Вычисление CRC32

                   /// </summary>

                   /// <param name="stream"></param>

                   /// <returns></returns>

                   public static uint CalculateCRC(System.IO.Stream stream)

                   {

                            const int buffer_size = 1024;

                            const uint POLYNOMIAL = 0xEDB88320;

 

                            uint result = 0xFFFFFFFF;

                            uint Crc32;

                            byte[] buffer = new byte[buffer_size];

                            uint[] table_CRC32 = new uint[256];

                            unchecked

                            {

                                      // Инициалиазация таблицы

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

                                      {

                                               Crc32 = (uint)i;

 

                                               for (int j = 8; j > 0; j--)

                                               {

                                                        if ((Crc32 & 1)==1)

                                                                  Crc32 = (Crc32 >> 1) ^ POLYNOMIAL;

                                                        else

                                                                  Crc32 >>= 1;

                                               }

                                               table_CRC32[i] = Crc32;

                                      }

 /

                                      // Чтение из буфера

                                      int count = stream.Read(buffer, 0, buffer_size);

                                      // Вычисление CRC

                                      while (count > 0)

                                      {

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

                                               {

                                                        result = ((result) >> 8)

                                                                  ^ table_CRC32[(buffer[i])

                                                                  ^ ((result) & 0x000000FF)];

                                               }

                                               count = stream.Read(buffer, 0, buffer_size);

                                      }

                            }

 

                            return ~result;

                   }

 //MD5

 private void button2_Click(object sender, EventArgs e)

 {

 textBox4.Text = MD5File(textBox2.Text.ToString()).ToString();

 }

 //статические переменные

 private static UInt32 A;

 private static UInt32 B;

 private static UInt32 C;

 private static UInt32 D;

 

 //номер бита сдвиг

 private const int S11 = 7;

 private const int S12 = 12;

 private const int S13 = 17;

 private const int S14 = 22;

 private const int S21 = 5;

 private const int S22 = 9;

 private const int S23 = 14;

 private const int S24 = 20;

 private const int S31 = 4;

 private const int S32 = 11;

 private const int S33 = 16;

 private const int S34 = 23;

 private const int S41 = 6;

 private const int S42 = 10;

 private const int S43 = 15;

 private const int S44 = 21;

 /* сдвиги

 r[ 0..15] := {7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22}

 r[16..31] := {5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20}

 r[32..47] := {4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23}

 r[48..63] := {6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21}*/

 /* F, G, H и I основные функции алгоритма вычисления MD5

 F(X,Y,Z) =(X&Y)|((~X)&Z)

 G(X,Y,Z) =(X&Z)|(Y&(~Z))

 H(X,Y,Z) =X^Y^Z

 I(X,Y,Z)=Y^(X|(~Z))

 */

 private static UInt32 F(UInt32 x, UInt32 y, UInt32 z)

 

 

 private static UInt32 G(UInt32 x, UInt32 y, UInt32 z)

 

 private static UInt32 H(UInt32 x, UInt32 y, UInt32 z)

 {

 return x ^ y ^ z;

 }

 private static UInt32 I(UInt32 x, UInt32 y, UInt32 z)

 

 

 // FF, GG, HH, и II преобразоания для раундов 1, 2, 3, и 4.

 

 private static void FF(ref UInt32 a, UInt32 b, UInt32 c, UInt32 d, UInt32 mj, int s, UInt32 ti)

 

 a = a << s

 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()

 {

 A = 0x67452301; //в памяти 0x01234567

 B = 0xefcdab89; //в памяти, 0x89abcdef

 C = 0x98badcfe; //в памяти, 0xfedcba98

 D = 0x10325476; //в памяти, 0x76543210

 }

 

 private static UInt32[] MD5_Append(byte[] input)

 {

 int zeros = 0;

 int ones = 1;

 int size = 0;

 int n = input.Length;

 int m = n % 64; //остаток от деления

 if (m < 56)

 {

 zeros = 55 - m;

 size = n - m + 64;

 }

 else

 {

 zeros = 63 - m + 56;

 size = n + 64 - m + 64;

 }

 

 ArrayList bs = new ArrayList(input);

 if (ones == 1)

 {

 bs.Add((byte)0x80); // 0x80 = $10000000

 }

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

 {

 bs.Add((byte)0);

 }

 

 UInt64 N = (UInt64)n * 8;

 byte h1 = (byte)(N & 0xFF);

 byte h2 = (byte)((N >> 8) & 0xFF);

 byte h3 = (byte)((N >> 16) & 0xFF);

 byte h4 = (byte)((N >> 24) & 0xFF);

 byte h5 = (byte)((N >> 32) & 0xFF);

 byte h6 = (byte)((N >> 40) & 0xFF);

 byte h7 = (byte)((N >> 48) & 0xFF);

 byte h8 = (byte)(N >> 56);

 bs.Add(h1);

 bs.Add(h2);

 bs.Add(h3);

 bs.Add(h4);

 bs.Add(h5);

 bs.Add(h6);

 bs.Add(h7);

 bs.Add(h8);

 byte[] ts = (byte[])bs.ToArray(typeof(byte));

 

 // Декодинг input (byte[]) в output (UInt32[])

 

 UInt32[] output = new UInt32[size / 4];

 for (Int64 i = 0, j = 0; i < size; j++, i += 4)

 

 return output;

 }

 

 private static UInt32[] MD5_Trasform(UInt32[] x)

 {

 

 UInt32 a, b, c, d;

 

 for (int k = 0; k < x.Length; k += 16)

 {

 a = A;

 b = B;

 c = C;

 d = D;

 

 /* Раунд1 */

 FF(ref a, b, c, d, x[k + 0], S11, 0xd76aa478); /* 1 */

 FF(ref d, a, b, c, x[k + 1], S12, 0xe8c7b756); /* 2 */

 FF(ref c, d, a, b, x[k + 2], S13, 0x242070db); /* 3 */

 FF(ref b, c, d, a, x[k + 3], S14, 0xc1bdceee); /* 4 */

 FF(ref a, b, c, d, x[k + 4], S11, 0xf57c0faf); /* 5 */

 FF(ref d, a, b, c, x[k + 5], S12, 0x4787c62a); /* 6 */

 FF(ref c, d, a, b, x[k + 6], S13, 0xa8304613); /* 7 */

 FF(ref b, c, d, a, x[k + 7], S14, 0xfd469501); /* 8 */

 FF(ref a, b, c, d, x[k + 8], S11, 0x698098d8); /* 9 */

 FF(ref d, a, b, c, x[k + 9], S12, 0x8b44f7af); /* 10 */

 FF(ref c, d, a, b, x[k + 10], S13, 0xffff5bb1); /* 11 */

 FF(ref b, c, d, a, x[k + 11], S14, 0x895cd7be); /* 12 */

 FF(ref a, b, c, d, x[k + 12], S11, 0x6b901122); /* 13 */

 FF(ref d, a, b, c, x[k + 13], S12, 0xfd987193); /* 14 */

 FF(ref c, d, a, b, x[k + 14], S13, 0xa679438e); /* 15 */

 FF(ref b, c, d, a, x[k + 15], S14, 0x49b40821); /* 16 */

 

 /* Раунд2 */

 GG(ref a, b, c, d, x[k + 1], S21, 0xf61e2562); /* 17 */

 GG(ref d, a, b, c, x[k + 6], S22, 0xc040b340); /* 18 */

 GG(ref c, d, a, b, x[k + 11], S23, 0x265e5a51); /* 19 */

 GG(ref b, c, d, a, x[k + 0], S24, 0xe9b6c7aa); /* 20 */

 GG(ref a, b, c, d, x[k + 5], S21, 0xd62f105d); /* 21 */

 GG(ref d, a, b, c, x[k + 10], S22, 0x2441453); /* 22 */

 GG(ref c, d, a, b, x[k + 15], S23, 0xd8a1e681); /* 23 */

 GG(ref b, c, d, a, x[k + 4], S24, 0xe7d3fbc8); /* 24 */

 GG(ref a, b, c, d, x[k + 9], S21, 0x21e1cde6); /* 25 */

 GG(ref d, a, b, c, x[k + 14], S22, 0xc33707d6); /* 26 */

 GG(ref c, d, a, b, x[k + 3], S23, 0xf4d50d87); /* 27 */

 GG(ref b, c, d, a, x[k + 8], S24, 0x455a14ed); /* 28 */

 GG(ref a, b, c, d, x[k + 13], S21, 0xa9e3e905); /* 29 */

 GG(ref d, a, b, c, x[k + 2], S22, 0xfcefa3f8); /* 30 */

 GG(ref c, d, a, b, x[k + 7], S23, 0x676f02d9); /* 31 */

 GG(ref b, c, d, a, x[k + 12], S24, 0x8d2a4c8a); /* 32 */

 

 /* Раунд3 */

 HH(ref a, b, c, d, x[k + 5], S31, 0xfffa3942); /* 33 */

 HH(ref d, a, b, c, x[k + 8], S32, 0x8771f681); /* 34 */

 HH(ref c, d, a, b, x[k + 11], S33, 0x6d9d6122); /* 35 */

 HH(ref b, c, d, a, x[k + 14], S34, 0xfde5380c); /* 36 */

 HH(ref a, b, c, d, x[k + 1], S31, 0xa4beea44); /* 37 */

 HH(ref d, a, b, c, x[k + 4], S32, 0x4bdecfa9); /* 38 */

 HH(ref c, d, a, b, x[k + 7], S33, 0xf6bb4b60); /* 39 */

 HH(ref b, c, d, a, x[k + 10], S34, 0xbebfbc70); /* 40 */

 HH(ref a, b, c, d, x[k + 13], S31, 0x289b7ec6); /* 41 */

 HH(ref d, a, b, c, x[k + 0], S32, 0xeaa127fa); /* 42 */

 HH(ref c, d, a, b, x[k + 3], S33, 0xd4ef3085); /* 43 */

 HH(ref b, c, d, a, x[k + 6], S34, 0x4881d05); /* 44 */

 HH(ref a, b, c, d, x[k + 9], S31, 0xd9d4d039); /* 45 */

 HH(ref d, a, b, c, x[k + 12], S32, 0xe6db99e5); /* 46 */

 HH(ref c, d, a, b, x[k + 15], S33, 0x1fa27cf8); /* 47 */

 HH(ref b, c, d, a, x[k + 2], S34, 0xc4ac5665); /* 48 */

 

 /* Раунд4 */

 II(ref a, b, c, d, x[k + 0], S41, 0xf4292244); /* 49 */

 II(ref d, a, b, c, x[k + 7], S42, 0x432aff97); /* 50 */

 II(ref c, d, a, b, x[k + 14], S43, 0xab9423a7); /* 51 */

 II(ref b, c, d, a, x[k + 5], S44, 0xfc93a039); /* 52 */

 II(ref a, b, c, d, x[k + 12], S41, 0x655b59c3); /* 53 */

 II(ref d, a, b, c, x[k + 3], S42, 0x8f0ccc92); /* 54 */

 II(ref c, d, a, b, x[k + 10], S43, 0xffeff47d); /* 55 */

 II(ref b, c, d, a, x[k + 1], S44, 0x85845dd1); /* 56 */

 II(ref a, b, c, d, x[k + 8], S41, 0x6fa87e4f); /* 57 */

 II(ref d, a, b, c, x[k + 15], S42, 0xfe2ce6e0); /* 58 */

 II(ref c, d, a, b, x[k + 6], S43, 0xa3014314); /* 59 */

 II(ref b, c, d, a, x[k + 13], S44, 0x4e0811a1); /* 60 */

 II(ref a, b, c, d, x[k + 4], S41, 0xf7537e82); /* 61 */

 II(ref d, a, b, c, x[k + 11], S42, 0xbd3af235); /* 62 */

 II(ref c, d, a, b, x[k + 2], S43, 0x2ad7d2bb); /* 63 */

 II(ref b, c, d, a, x[k + 9], S44, 0xeb86d391); /* 64 */

 

 A += a;

 B += b;

 C += c;

 D += d;

 }

 return new UInt32[] { A, B, C, D };

 }

 private static byte[] MD5Array(byte[] input)

 {

 MD5_Init();

 UInt32[] block = MD5_Append(input);

 UInt32[] bits = MD5_Trasform(block);

 

 // Кодирует bits (UInt32[]) в output (byte[]).

 byte[] output = new byte[bits.Length * 4];

 for (int i = 0, j = 0; i < bits.Length; i++, j += 4)

 {

 output[j] = (byte)(bits[i] & 0xff);

 output[j + 1] = (byte)((bits[i] >> 8) & 0xff);

 output[j + 2] = (byte)((bits[i] >> 16) & 0xff);

 output[j + 3] = (byte)((bits[i] >> 24) & 0xff);

 }

 return output;

 }

 private static string ArrayToHexString(byte[] array, bool uppercase)

 {

 string hexString = "";

 string format = "x2";

 if (uppercase)

 {

 format = "X2";

 }

 foreach (byte b in array)

 {

 hexString += b.ToString(format);

 }

 return hexString;

 }

 private static string MD5File(string fileName)

 {

 FileStream fs = File.Open(fileName, FileMode.Open, FileAccess.Read);

 byte[] array = new byte[fs.Length];

 fs.Read(array, 0, (int)fs.Length);

 byte[] digest = MD5Array(array);

 fs.Close();

 return ArrayToHexString(digest, false);

 }

 }

}

//HardDrive.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace kurs_pogulyat

{

 class HardDrive

 {

 private string model = "";

 private string type = "";

 private string serialNo = "";

 private string bytesPerSector = "";

 private string mediaType = "";

 private string partitions = "";

 private string sectorsPerTrack = "";

 private string signature = "";

 private string size = "";

 private string freespace = "";

 private string status = "";

 private string totalCylinders = "";

 private string totalHeads = "";

 private string totalSectors = "";

 private string totalTracks = "";

 private string tracksPerCylinder = "";

 private string firmwareRevision = "";

 public string Model

 {

 get { return model; }

 set { model = value; }

 }

 public string Type

 {

 get { return type; }

 set { type = value; }

 }

 public string SerialNo

 {

 get { return serialNo; }

 set { serialNo = value; }

 }

 public string BytesPerSector

 {

 get { return bytesPerSector; }

 set { bytesPerSector = value; }

 }

 public string MediaType

 {

 get { return mediaType; }

 set { mediaType = value; }

 }

 public string Partitions

 {

 get { return partitions; }

 set { partitions = value; }

 }

 public string SectorsPerTrack

 {

 get { return sectorsPerTrack; }

 set { sectorsPerTrack = value; }

 }

 public string Signature

 {

 get { return signature; }

 set { signature = value; }

 }

 public string Size

 {

 get { return size; }

 set { size = value; }

 }

 public string FreeSpace

 {

 get { return freespace; }

 set { freespace = value; }

 }

 public string Status

 {

 get { return status; }

 set { status = value; }

 }

 public string TotalCylinders

 {

 get { return totalCylinders; }

 set { totalCylinders = value; }

 }

 public string TotalHeads

 {

 get { return totalHeads; }

 set { totalHeads = value; }

 }

 public string TotalSectors

 {

 get { return totalSectors; }

 set { totalSectors = value; }

 }

 public string TotalTracks

 {

 get { return totalTracks; }

 set { totalTracks = value; }

 }

 public string TracksPerCylinder

 {

 get { return tracksPerCylinder; }

 set { tracksPerCylinder = value; }

 }

 public string FirmwareRevision

 {

 get { return firmwareRevision; }

 set { firmwareRevision = value; }

 } }

}

//Program.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

namespace kurs_pogulyat

{

 static class Program

 {

 [STAThread]

 static void Main()

 {

 Application.EnableVisualStyles();

 Application.SetCompatibleTextRenderingDefault(false);

 Application.Run(new Form1());

 }

 }

}


Страницы: 1, 2


на тему рефераты
НОВОСТИ на тему рефераты
на тему рефераты
ВХОД на тему рефераты
Логин:
Пароль:
регистрация
забыли пароль?

на тему рефераты    
на тему рефераты
ТЕГИ на тему рефераты

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


Copyright © 2012 г.
При использовании материалов - ссылка на сайт обязательна.