Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчёт по лабораторным.docx
Скачиваний:
13
Добавлен:
18.11.2022
Размер:
494.32 Кб
Скачать

Лабораторная работа № 9. Реализация различных алгоритмов хеширования.

  1. Открыть проект, созданный при выполнении лабораторной работы № 3.

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

  3. Предоставить пользователю возможность выбора алгоритма хеширования.

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

Текст программы:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Security.Cryptography;

using System.IO;

namespace Информационная_безопасность__9

{

public partial class Form1 : Form

{

RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(512);

public Form1()

{

InitializeComponent();

}

private void ключиRSAToolStripMenuItem_Click(object sender, EventArgs e)

{

SaveFileDialog save = new SaveFileDialog();

save.Filter = "Бинарные файлы|*.bin|Все файлы|*.*";

save.Title = "Сохранение открытого и секретного ключа";

if (save.ShowDialog() == DialogResult.OK)

{

FileStream fs = new FileStream(save.FileName, FileMode.OpenOrCreate);

StreamWriter sw = new StreamWriter(fs);

sw.Write(RSA.ToXmlString(true));

sw.Flush();

fs.Close();

}

SaveFileDialog sf = new SaveFileDialog();

sf.Filter = "Бинарные файлы|*.bin|Все файлы|*.*";

sf.Title = "Сохранение открытого ключа";

if (sf.ShowDialog() == DialogResult.OK)

{

FileStream fis = new FileStream(sf.FileName, FileMode.OpenOrCreate);

StreamWriter stw = new StreamWriter(fis);

stw.Write(RSA.ToXmlString(false));

stw.Flush();

fis.Close();

label1.Text = "Пара ключей успешно создана";

}

}

private void открытьФайлToolStripMenuItem_Click(object sender, EventArgs e)

{

richTextBox1.Clear();

richTextBox1.Visible = true;

OpenFileDialog open = new OpenFileDialog();

open.Filter = "Текстовые файлы|*.txt|Все файлы|*.*";

open.Title = "Открытие файла";

if (open.ShowDialog() == DialogResult.OK)

{

StreamReader sr = new StreamReader(open.FileName);

richTextBox1.Text = sr.ReadLine();

label1.Text = "";

подписатьToolStripMenuItem.Visible = true;

}

}

private void открытьФайлToolStripMenuItem1_Click(object sender, EventArgs e)

{

richTextBox1.Clear();

richTextBox1.Visible = true;

OpenFileDialog open = new OpenFileDialog();

open.Filter = "Текстовые файлы|*.txt|Все файлы|*.*";

open.Title = "Открытие файла";

if (open.ShowDialog() == DialogResult.OK)

{

StreamReader sr = new StreamReader(open.FileName);

richTextBox1.Text = sr.ReadLine();

label1.Text = "";

}

}

private void подписатьToolStripMenuItem_Click(object sender, EventArgs e)

{

if (comboBox1.SelectedIndex == 0)

{

OpenFileDialog open = new OpenFileDialog();

open.Filter = "Бинарные файлы|*.bin|Все файлы|*.*";

open.Title = "Открытие файла секретного ключа";

if (open.ShowDialog() == DialogResult.OK)

{

FileStream fs = new FileStream(open.FileName, FileMode.Open);

StreamReader sr = new StreamReader(fs);

RSA.FromXmlString(sr.ReadToEnd());

fs.Close();

sr.Close();

}

SaveFileDialog save = new SaveFileDialog();

save.Filter = "Бинарные файлы|*.bin|Все файлы|*.*";

save.Title = "Сохранение цифровой подписи";

if (save.ShowDialog() == DialogResult.OK)

{

string text;

text = richTextBox1.Text;

Byte[] sign;

Byte[] data = System.Text.Encoding.UTF8.GetBytes(text);

sign = RSA.SignData(data, new MD5CryptoServiceProvider());

FileStream fis = new FileStream(save.FileName, FileMode.OpenOrCreate);

fis.Write(sign, 0, sign.Length);

fis.Close();

label1.Text = "Цифровая подпись успешно создана";

}

}

if (comboBox1.SelectedIndex == 1)

{

OpenFileDialog open = new OpenFileDialog();

open.Filter = "Бинарные файлы|*.bin|Все файлы|*.*";

open.Title = "Открытие файла секретного ключа";

if (open.ShowDialog() == DialogResult.OK)

{

FileStream fs = new FileStream(open.FileName, FileMode.Open);

StreamReader sr = new StreamReader(fs);

RSA.FromXmlString(sr.ReadToEnd());

fs.Close();

sr.Close();

}

SaveFileDialog save = new SaveFileDialog();

save.Filter = "Бинарные файлы|*.bin|Все файлы|*.*";

save.Title = "Сохранение цифровой подписи";

if (save.ShowDialog() == DialogResult.OK)

{

string text;

text = richTextBox1.Text;

Byte[] sign;

Byte[] data = System.Text.Encoding.UTF8.GetBytes(text);

sign = RSA.SignData(data, new SHA1CryptoServiceProvider());

FileStream fis = new FileStream(save.FileName, FileMode.OpenOrCreate);

fis.Write(sign, 0, sign.Length);

fis.Close();

label1.Text = "Цифровая подпись успешно создана";

}

}

if (comboBox1.SelectedIndex == 2)

{

OpenFileDialog open = new OpenFileDialog();

open.Filter = "Бинарные файлы|*.bin|Все файлы|*.*";

open.Title = "Открытие файла секретного ключа";

if (open.ShowDialog() == DialogResult.OK)

{

FileStream fs = new FileStream(open.FileName, FileMode.Open);

StreamReader sr = new StreamReader(fs);

RSA.FromXmlString(sr.ReadToEnd());

fs.Close();

sr.Close();

}

SaveFileDialog save = new SaveFileDialog();

save.Filter = "Бинарные файлы|*.bin|Все файлы|*.*";

save.Title = "Сохранение цифровой подписи";

if (save.ShowDialog() == DialogResult.OK)

{

string text;

text = richTextBox1.Text;

Byte[] sign;

Byte[] data = System.Text.Encoding.UTF8.GetBytes(text);

sign = RSA.SignData(data, new SHA256CryptoServiceProvider());

FileStream fis = new FileStream(save.FileName, FileMode.OpenOrCreate);

fis.Write(sign, 0, sign.Length);

fis.Close();

label1.Text = "Цифровая подпись успешно создана";

}

}

if (comboBox1.SelectedIndex == 3)

{

OpenFileDialog open = new OpenFileDialog();

open.Filter = "Бинарные файлы|*.bin|Все файлы|*.*";

open.Title = "Открытие файла секретного ключа";

if (open.ShowDialog() == DialogResult.OK)

{

FileStream fs = new FileStream(open.FileName, FileMode.Open);

StreamReader sr = new StreamReader(fs);

RSA.FromXmlString(sr.ReadToEnd());

fs.Close();

sr.Close();

}

SaveFileDialog save = new SaveFileDialog();

save.Filter = "Бинарные файлы|*.bin|Все файлы|*.*";

save.Title = "Сохранение цифровой подписи";

if (save.ShowDialog() == DialogResult.OK)

{

string text;

text = richTextBox1.Text;

Byte[] sign;

Byte[] data = System.Text.Encoding.UTF8.GetBytes(text);

sign = RSA.SignData(data, new SHA384CryptoServiceProvider());

FileStream fis = new FileStream(save.FileName, FileMode.OpenOrCreate);

fis.Write(sign, 0, sign.Length);

fis.Close();

label1.Text = "Цифровая подпись успешно создана";

}

}

if (comboBox1.SelectedIndex == 4)

{

OpenFileDialog open = new OpenFileDialog();

open.Filter = "Бинарные файлы|*.bin|Все файлы|*.*";

open.Title = "Открытие файла секретного ключа";

if (open.ShowDialog() == DialogResult.OK)

{

FileStream fs = new FileStream(open.FileName, FileMode.Open);

StreamReader sr = new StreamReader(fs);

RSA.FromXmlString(sr.ReadToEnd());

fs.Close();

sr.Close();

}

SaveFileDialog save = new SaveFileDialog();

save.Filter = "Бинарные файлы|*.bin|Все файлы|*.*";

save.Title = "Сохранение цифровой подписи";

if (save.ShowDialog() == DialogResult.OK)

{

string text;

text = richTextBox1.Text;

Byte[] sign;

Byte[] data = System.Text.Encoding.UTF8.GetBytes(text);

sign = RSA.SignData(data, new SHA512CryptoServiceProvider());

FileStream fis = new FileStream(save.FileName, FileMode.OpenOrCreate);

fis.Write(sign, 0, sign.Length);

fis.Close();

label1.Text = "Цифровая подпись успешно создана";

}

}

}

private void открытыйКлючToolStripMenuItem_Click(object sender, EventArgs e)

{

OpenFileDialog open = new OpenFileDialog();

open.Filter = "Бинарные файлы|*.bin|Все файлы|*.*";

open.Title = "Открытие файла открытого ключа";

if (open.ShowDialog() == DialogResult.OK)

{

FileStream fs = new FileStream(open.FileName, FileMode.Open);

StreamReader sr = new StreamReader(fs);

RSA.FromXmlString(sr.ReadToEnd());

sr.Close();

fs.Close();

label1.Text = "Ключ успешно прочитан";

}

}

private void верификацияПодписиToolStripMenuItem_Click(object sender, EventArgs e)

{

if (comboBox1.SelectedIndex == 0)

{

OpenFileDialog open = new OpenFileDialog();

open.Filter = "Бинарные файлы|*.bin|Все файлы|*.*";

open.Title = "Открытие файла цифровой подписи";

if (open.ShowDialog() == DialogResult.OK)

{

String text;

text = richTextBox1.Text;

Byte[] sign = new Byte[64];

Byte[] data = System.Text.Encoding.UTF8.GetBytes(text);

FileStream fs = new FileStream(open.FileName, FileMode.Open);

fs.Read(sign, 0, sign.Length);

fs.Close();

if (RSA.VerifyData(data, new MD5CryptoServiceProvider(), sign))

{

label1.Text = "Подпись верна";

}

else

{

label1.Text = "Подпись не верна";

}

}

}

if (comboBox1.SelectedIndex == 1)

{

OpenFileDialog open = new OpenFileDialog();

open.Filter = "Бинарные файлы|*.bin|Все файлы|*.*";

open.Title = "Открытие файла цифровой подписи";

if (open.ShowDialog() == DialogResult.OK)

{

String text;

text = richTextBox1.Text;

Byte[] sign = new Byte[64];

Byte[] data = System.Text.Encoding.UTF8.GetBytes(text);

FileStream fs = new FileStream(open.FileName, FileMode.Open);

fs.Read(sign, 0, sign.Length);

fs.Close();

if (RSA.VerifyData(data, new SHA1CryptoServiceProvider(), sign))

{

label1.Text = "Подпись верна";

}

else

{

label1.Text = "Подпись не верна";

}

}

}

if (comboBox1.SelectedIndex == 2)

{

OpenFileDialog open = new OpenFileDialog();

open.Filter = "Бинарные файлы|*.bin|Все файлы|*.*";

open.Title = "Открытие файла цифровой подписи";

if (open.ShowDialog() == DialogResult.OK)

{

String text;

text = richTextBox1.Text;

Byte[] sign = new Byte[64];

Byte[] data = System.Text.Encoding.UTF8.GetBytes(text);

FileStream fs = new FileStream(open.FileName, FileMode.Open);

fs.Read(sign, 0, sign.Length);

fs.Close();

if (RSA.VerifyData(data, new SHA256CryptoServiceProvider(), sign))

{

label1.Text = "Подпись верна";

}

else

{

label1.Text = "Подпись не верна";

}

}

}

if (comboBox1.SelectedIndex == 3)

{

OpenFileDialog open = new OpenFileDialog();

open.Filter = "Бинарные файлы|*.bin|Все файлы|*.*";

open.Title = "Открытие файла цифровой подписи";

if (open.ShowDialog() == DialogResult.OK)

{

String text;

text = richTextBox1.Text;

Byte[] sign = new Byte[64];

Byte[] data = System.Text.Encoding.UTF8.GetBytes(text);

FileStream fs = new FileStream(open.FileName, FileMode.Open);

fs.Read(sign, 0, sign.Length);

fs.Close();

if (RSA.VerifyData(data, new SHA384CryptoServiceProvider(), sign))

{

label1.Text = "Подпись верна";

}

else

{

label1.Text = "Подпись не верна";

}

}

}

if (comboBox1.SelectedIndex == 4)

{

OpenFileDialog open = new OpenFileDialog();

open.Filter = "Бинарные файлы|*.bin|Все файлы|*.*";

open.Title = "Открытие файла цифровой подписи";

if (open.ShowDialog() == DialogResult.OK)

{

String text;

text = richTextBox1.Text;

Byte[] sign = new Byte[64];

Byte[] data = System.Text.Encoding.UTF8.GetBytes(text);

FileStream fs = new FileStream(open.FileName, FileMode.Open);

fs.Read(sign, 0, sign.Length);

fs.Close();

if (RSA.VerifyData(data, new SHA512CryptoServiceProvider(), sign))

{

label1.Text = "Подпись верна";

}

else

{

label1.Text = "Подпись не верна";

}

}

}

}

}

}

Контрольный пример:

Образец главной формы проекта:

Результат работы пункта меню «Ключи RSA»:

Результат работы пункта меню «Открыть файл»:

Результат работы пункта меню «Подписать»:

Результат работы пункта меню «Открытый ключ»:

Результат работы пункта меню «Верификация подписи»: