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

Лабораторная работа № 8. Реализация различных алгоритмов симметричного шифрования данных в комбинации с асимметричным шифрованием.

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

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

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

  4. Обеспечить шифрование симметричного ключа с помощью алгоритма RSA.

  5. Обеспечить шифрование текстового файла с помощью выбранного алгоритма симметричного шифрования.

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

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»:

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

Результат работы пункта меню «Зашифровать»:

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