- •Лабораторная работа № 1. Симметричное шифрование данных.
- •Лабораторная работа № 2. Дополнительные возможности симметричного шифрование данных.
- •InitializeComponent();
- •Лабораторная работа № 3. Асимметричное шифрование данных.
- •Создать в блокноте файл с некоторым текстом и сохранить его на диске в кодировке Юникод.
- •InitializeComponent();
- •Лабораторная работа № 4. Цифровая подпись.
- •Создать в блокноте файл с некоторым текстом и сохранить его на диске в кодировке Юникод.
- •InitializeComponent();
- •Лабораторная работа № 5. Шифрование в sql Server.
- •Лабораторная работа № 6. Работа с зашифрованными базами в Visual Studio.
- •InitializeComponent();
- •Лабораторная работа № 7. Реализация различных алгоритмов симметричного шифрования данных.
- •InitializeComponent();
- •InitializeComponent();
- •InitializeComponent();
- •InitializeComponent();
- •InitializeComponent();
- •Лабораторная работа № 8. Реализация различных алгоритмов симметричного шифрования данных в комбинации с асимметричным шифрованием.
- •InitializeComponent();
- •Лабораторная работа № 9. Реализация различных алгоритмов хеширования.
- •InitializeComponent();
Лабораторная работа № 8. Реализация различных алгоритмов симметричного шифрования данных в комбинации с асимметричным шифрованием.
Открыть проект, созданный при выполнении лабораторной работы № 3.
Модернизировать его, добавив на форму элемент управления ComboBox, в состав элементов которого включить все алгоритмы симметричного шифрования, реализованные в Visual Studio .Net.
Предоставить пользователю возможность выбора алгоритма симметричного шифрования.
Обеспечить шифрование симметричного ключа с помощью алгоритма RSA.
Обеспечить шифрование текстового файла с помощью выбранного алгоритма симметричного шифрования.
Текст программы:
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 Информационная_безопасность__8
{
public partial class Form1 : Form
{
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(1024);
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)
{
if (comboBox1.SelectedIndex == 0)
{
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();
}
if (comboBox1.SelectedIndex == 1)
{
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);
TripleDESCryptoServiceProvider TDES = new TripleDESCryptoServiceProvider();
byte[] EK = RSA.Encrypt(TDES.Key, false);
byte[] EIV = RSA.Encrypt(TDES.IV, false);
fs.Write(EK, 0, EK.Length);
fs.Write(EIV, 0, EIV.Length);
ICryptoTransform trans = TDES.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);
TripleDESCryptoServiceProvider D = new TripleDESCryptoServiceProvider();
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();
}
if (comboBox1.SelectedIndex == 2)
{
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);
RC2CryptoServiceProvider RC2 = new RC2CryptoServiceProvider();
byte[] EK = RSA.Encrypt(RC2.Key, false);
byte[] EIV = RSA.Encrypt(RC2.IV, false);
fs.Write(EK, 0, EK.Length);
fs.Write(EIV, 0, EIV.Length);
ICryptoTransform trans = RC2.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);
RC2CryptoServiceProvider R = new RC2CryptoServiceProvider();
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();
}
if (comboBox1.SelectedIndex == 3)
{
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);
RijndaelManaged Rj = new RijndaelManaged();
byte[] EK = RSA.Encrypt(Rj.Key, false);
byte[] EIV = RSA.Encrypt(Rj.IV, false);
fs.Write(EK, 0, EK.Length);
fs.Write(EIV, 0, EIV.Length);
ICryptoTransform trans = Rj.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);
RijndaelManaged R = new RijndaelManaged();
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)
{
if (comboBox1.SelectedIndex == 0)
{
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();
}
}
if (comboBox1.SelectedIndex == 1)
{
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);
TripleDESCryptoServiceProvider D = new TripleDESCryptoServiceProvider();
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();
}
}
if (comboBox1.SelectedIndex == 2)
{
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);
RC2CryptoServiceProvider R = new RC2CryptoServiceProvider();
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();
}
}
if (comboBox1.SelectedIndex == 3)
{
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);
RijndaelManaged R = new RijndaelManaged();
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)
{
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();
}
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();
}
}
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();
}
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];
TripleDESCryptoServiceProvider TDES = new TripleDESCryptoServiceProvider();
fs.Read(EK, 0, EK.Length);
fs.Read(EIV, 0, EIV.Length);
TDES.KeySize = KBS;
TDES.Key = RSA.Decrypt(EK, false);
TDES.IV = RSA.Decrypt(EIV, false);
ICryptoTransform trans = TDES.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();
}
}
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();
}
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];
RC2CryptoServiceProvider R = new RC2CryptoServiceProvider();
fs.Read(EK, 0, EK.Length);
fs.Read(EIV, 0, EIV.Length);
R.KeySize = KBS;
R.Key = RSA.Decrypt(EK, false);
R.IV = RSA.Decrypt(EIV, false);
ICryptoTransform trans = R.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();
}
}
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();
}
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];
RijndaelManaged R = new RijndaelManaged();
fs.Read(EK, 0, EK.Length);
fs.Read(EIV, 0, EIV.Length);
R.KeySize = KBS;
R.Key = RSA.Decrypt(EK, false);
R.IV = RSA.Decrypt(EIV, false);
ICryptoTransform trans = R.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»:
Результат работы пункта меню «Выбрать файл»:
Результат работы пункта меню «Зашифровать»:
Результат работы пункта меню «Расшифровать»: