- •Лабораторная работа № 1. Симметричное шифрование данных.
- •Лабораторная работа № 2. Дополнительные возможности симметричного шифрование данных.
- •InitializeComponent();
- •Лабораторная работа № 3. Асимметричное шифрование данных.
- •Создать в блокноте файл с некоторым текстом и сохранить его на диске в кодировке Юникод.
- •InitializeComponent();
- •Лабораторная работа № 4. Цифровая подпись.
- •Создать в блокноте файл с некоторым текстом и сохранить его на диске в кодировке Юникод.
- •InitializeComponent();
- •Лабораторная работа № 5. Шифрование в sql Server.
- •Лабораторная работа № 6. Работа с зашифрованными базами в Visual Studio.
- •InitializeComponent();
- •Лабораторная работа № 7. Реализация различных алгоритмов симметричного шифрования данных.
- •InitializeComponent();
- •InitializeComponent();
- •InitializeComponent();
- •InitializeComponent();
- •InitializeComponent();
- •Лабораторная работа № 8. Реализация различных алгоритмов симметричного шифрования данных в комбинации с асимметричным шифрованием.
- •InitializeComponent();
- •Лабораторная работа № 9. Реализация различных алгоритмов хеширования.
- •InitializeComponent();
Лабораторная работа № 9. Реализация различных алгоритмов хеширования.
Открыть проект, созданный при выполнении лабораторной работы № 3.
Модернизировать его, добавив на форму элемент управления ComboBox, в состав элементов которого включить все алгоритмы хеширования, с помощью которых можно создавать цифровую подпись.
Предоставить пользователю возможность выбора алгоритма хеширования.
Обеспечить возможность генерации цифровой подписи с помощью выбранного алгоритма хеширования.
Текст программы:
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»:
Результат работы пункта меню «Открыть файл»:
Результат работы пункта меню «Подписать»:
Результат работы пункта меню «Открытый ключ»:
Результат работы пункта меню «Верификация подписи»: