- •Лабораторная работа № 1. Симметричное шифрование данных.
- •Лабораторная работа № 2. Дополнительные возможности симметричного шифрование данных.
- •InitializeComponent();
- •Лабораторная работа № 3. Асимметричное шифрование данных.
- •Создать в блокноте файл с некоторым текстом и сохранить его на диске в кодировке Юникод.
- •InitializeComponent();
- •Лабораторная работа № 4. Цифровая подпись.
- •Создать в блокноте файл с некоторым текстом и сохранить его на диске в кодировке Юникод.
- •InitializeComponent();
- •Лабораторная работа № 5. Шифрование в sql Server.
- •Лабораторная работа № 6. Работа с зашифрованными базами в Visual Studio.
- •InitializeComponent();
- •Лабораторная работа № 7. Реализация различных алгоритмов симметричного шифрования данных.
- •InitializeComponent();
- •InitializeComponent();
- •InitializeComponent();
- •InitializeComponent();
- •InitializeComponent();
- •Лабораторная работа № 8. Реализация различных алгоритмов симметричного шифрования данных в комбинации с асимметричным шифрованием.
- •InitializeComponent();
- •Лабораторная работа № 9. Реализация различных алгоритмов хеширования.
- •InitializeComponent();
Лабораторная работа № 3. Асимметричное шифрование данных.
Создать в блокноте файл с некоторым текстом и сохранить его на диске в кодировке Юникод.
Создать в Visual Studio .Net программу, осуществляющую шифровку и расшифровку этого файла с помощью алгоритмов RSA и DES.
Создать на форме меню из трёх пунктов: Ключи RSA, Шифрование и Дешифрование.
В меню Ключи RSA реализовать следующие функции: создание новой пары ключей RSA, сохранение обоих ключей в файле секретного ключа, сохранение отктытого ключа в файле открытого ключа. Имена файлов выбираются пользователем с помощью элемента управления SaveFileDialog.
Нанести на форму два элемента управления RichTextBox.
В меню Шифрование создать следующие подменю: Выбрать файл, Зашифровать.
В меню Выбрать файл реализовать следующие функции: выбор текстового файла и отображение данных из него в элементе управления RicTextBox. Выбор файла осуществляется с помощью элемента управления OpenFileDialog.
В меню Зашифровать реализовать следующие функции: выбор файла открытого ключа, создание нового ключа симметричного шифрования по алгоритму DES, шифрование этого ключа и вектора инициализации с помощью выбранного открытого ключа, запись их в файл, шифрование информации из элемента управления RichTextBox с помощью симметричного ключа, запись зашифрованной информации в тот же файл, в который был записан зашифрованный симметричный ключ. Имя файла с зашифровнной информацией следует выбирать с помощью элемента управления SaveFileDialog. Зашифрованная информация должна отобразиться в другом элементе управления RichTextBox.
В меню Дешифрование создать следующие пункты: Выбрать файл, Расшифровать.
В меню Выбрать файл реализовать следующие функции: выбор текстового файла с зашифрованной информацией и отображение данных из него в элементе управления RicTextBox. Выбор файла осуществляется с помощью элемента управления OpenFileDialog.
В меню Расшифровать реализовать следующие функции: выбор файла секретного ключа, расшифровка с его помощью симметричного ключа и вектора инициализации для алгоритма DES, расшифровка с помощью симметричного ключа пользовательской информации и отображение этой информации во втором элементе управления RichTextBox.
Проверить работу программы на правильных файлах ключей и исходных данных.
Выбрать пункт Расшифровать. В качестве файла секретного ключа выбрать файл не секретного, а открытого ключа. Проверить работу программы (в этом случае должна выдаваться ошибка, т.к. расшифровывать информацию с помощью открытого ключа нельзя).
Текст программы:
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 Информационная_безопасность__3
{
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)
{
richTextBox2.Clear();
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 зашифроватьToolStripMenuItem_Click(object sender, EventArgs e)
{
string text;
расшифроватьToolStripMenuItem.Visible = true;
text = richTextBox1.Text;
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();
}
SaveFileDialog save = new SaveFileDialog();
save.Filter = "Бинарные файлы|*.bin|Все файлы|*.*";
save.Title = "Сохранение зашифрованного файла";
if(save.ShowDialog()==DialogResult.OK)
{
FileStream fs = new FileStream(save.FileName, FileMode.OpenOrCreate);
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
byte[] EK = RSA.Encrypt(DES.Key, false);
byte[] EIV = RSA.Encrypt(DES.IV, false);
fs.Write(EK, 0, EK.Length);
fs.Write(EIV, 0, EIV.Length);
ICryptoTransform trans = DES.CreateEncryptor();
CryptoStream cs = new CryptoStream(fs,trans,CryptoStreamMode.Write);
StreamWriter sw = new StreamWriter(cs);
sw.Write(text);
richTextBox1.Clear();
richTextBox2.Visible = true;
sw.Flush();
cs.FlushFinalBlock();
sw.Close();
fs.Close();
}
FileStream fis = new FileStream(save.FileName, FileMode.Open);
Int32 KBS = Convert.ToInt32(RSA.KeySize / 8);
DESCryptoServiceProvider D = new DESCryptoServiceProvider();
byte[] EnK = new byte[KBS];
byte[] EnIV = new byte[KBS];
fis.Read(EnK, 0, EnK.Length);
fis.Read(EnIV, 0, EnIV.Length);
StreamReader str = new StreamReader(fis);
richTextBox2.Text = str.ReadToEnd();
str.Close();
fis.Close();
}
private void выбратьФайлToolStripMenuItem1_Click(object sender, EventArgs e)
{
richTextBox1.Clear();
richTextBox2.Clear();
richTextBox2.Visible = true;
label1.Text = "";
расшифроватьToolStripMenuItem.Visible = true;
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Бинарные файлы|*.bin|Все файлы|*.*";
open.Title = "Открытие зашифрованного файла";
if (open.ShowDialog() == DialogResult.OK)
{
FileStream fs = new FileStream(open.FileName, FileMode.Open);
Int32 KBS = Convert.ToInt32(RSA.KeySize / 8);
DESCryptoServiceProvider D = new DESCryptoServiceProvider();
byte[] EK = new byte[KBS];
byte[] EIV = new byte[KBS];
fs.Read(EK, 0, EK.Length);
fs.Read(EIV, 0, EIV.Length);
StreamReader sr = new StreamReader(fs);
richTextBox2.Text = sr.ReadToEnd();
sr.Close();
fs.Close();
}
}
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());
fs.Close();
sr.Close();
}
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Бинарные файлы|*.bin|Все файлы|*.*";
ofd.Title = "Расшифровка зашифрованного файла";
if (ofd.ShowDialog()==DialogResult.OK)
{
FileStream fs = new FileStream(ofd.FileName, FileMode.Open);
Int32 KBS = Convert.ToInt32(RSA.KeySize / 8);
byte[] EK = new byte[KBS];
byte[] EIV = new byte[KBS];
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
fs.Read(EK, 0, EK.Length);
fs.Read(EIV, 0, EIV.Length);
DES.KeySize = KBS;
DES.Key = RSA.Decrypt(EK, false);
DES.IV = RSA.Decrypt(EIV, false);
ICryptoTransform trans = DES.CreateDecryptor();
CryptoStream cs = new CryptoStream(fs, trans, CryptoStreamMode.Read);
StreamReader sr = new StreamReader(cs);
richTextBox1.Clear();
richTextBox1.Visible = true;
richTextBox1.Text = sr.ReadToEnd();
sr.Close();
fs.Close();
}
}
}
}
Контрольный пример:
Образец главной формы проекта:
Результат работы пункта меню «Ключи RSA»:
Результат работы пункта меню «Выбрать файл»:
Результат работы пункта меню «Зашифровать»:
Результат работы пункта меню «Расшифровать»: