- •2012 Содержание
- •Задание на выполнение курсового проекта
- •1 Краткие сведения о стандарте шифрованияDes
- •2. Режим des-ecb.
- •2.1. Общая схема шифрования.
- •2.2. Исходный текст класса шифрования.
- •2.3. Пример шифрования и расшифрования
- •3. Режим des-cbc
- •3.1. Общая схема шифрования
- •3.2. Исходный текст процедуры шифрования и дешифрования
- •3.3. Пример шифрования и расшифрования
- •4. Режим тройной des
- •4.1. Общие схемы шифрования
- •4.2. Исходные тексты процедур шифрования и дешифрования
- •4.3. Пример шифрования и дешифрования методомTripleDesede3
- •5. Руководство пользователя программы
- •5.5.2 Использование программного средства
- •Класс TestWindow
5. Руководство пользователя программы
5.1 Общие сведения
Изготовитель – Шведов Дмитрий Александрович, студент группы 23К.
Дата создания – февраль 2013 года.
Язык интерфейса пользователя – Русский.
Компоненты пакета – файл: DESCryptography_Shvedov_Dm_A.exe.
5.2 Назначение программы
Программа предназначена для шифрования и дешифрования текстовых сообщений с использованием алгоритма шифрования DES. Возможно шифрование шестью разновидностями алгоритмаDES:DESECB,DESCBC,TripleDESEEE3,TripleDESEEE2,TripleDESEDE3,TripleDESEDE2.
5.3 Используемые технические средства
Операционная система – WindowsXP,Vista, 7, 8
Свободное место на жестком диске – не менее 50 Кб
Объем оперативной памяти – 128 Мб и более
Процессор IntelCorei3 и выше
Видеокарта 512 Мб
5.4 Входные и выходные данные
Входными данными программы являются шифруемое и дешифруемое сообщение, которые задаются пользователем при работе с программой.
Выходные данные – зашифрованное и расшифрованное текстовое сообщение.
5.5 Ввод в действие программного средства
Данный программный продукт не требует установки на ПК, достаточно просто скопировать файл «DESCryptography_Shvedov_Dm_A.exe» в нужную пользователю папку. Для запуска программы необходимо два раза щелкнуть левой кнопкой мыши по исполняемому файлу DESCryptography_Shvedov_Dm_A.exe.
После запуска программы откроется окно программы (рисунок 7) и окно лог файла (рисунок 8).
Рисунок 7. Главное окно программы
Рисунок 8. Окно лог-файла
5.5.1 Интерфейс
Главное окно логически разделено на 3 области (рисунок 9): область 1, справа, в которой выбирается метод шифрования (DESECB,DESCBC,TripleDESEEE3,TripleDESEEE2,TripleDESEDE3,TripleDESEDE2) и вводятся необходимые ключи и начальный вектор (для методаDESCBC) для выбранного метода шифрования. В области 2, слева, расположены 3 текстовых поля. В первое вводится исходное сообщение, во второе после шифрования выводится зашифрованное сообщение, в третье выводится расшифрованное сообщение. В области 3 расположены элементы управления окном лог-файла.
Рисунок 9. Области главного окна
5.5.2 Использование программного средства
Программа реализует следующие функции:
Шифрование и дешифрование текста методом DESECB;
Шифрование и дешифрование текста методом DESCBC;
Шифрование и дешифрование текста методом TripleDESEEE3;
Шифрование и дешифрование текста методом TripleDESEEE2;
Шифрование и дешифрование текста методом TripleDESEDE3;
Шифрование и дешифрование текста методом TripleDESEDE2;
5.5.2.1 Шифрование текста
Для шифрования текста необходимо выбрать в области 2 нужный метод шифрования (рисунок 10). Заполнить в области 2 все видимые поля (в зависимости от выбранного метода шифрования это могут быть «Ключ», «Второй ключ», «Третий ключ» и «Начальный вектор»). В области 1 в верхнее текстовое поле ввести исходное сообщение и нажать кнопку «Crypt». Зашифрованное собщение отобразится в среднем текстовом поле.
5.5.2.2 Дешифрование текста
Для дешифрования текста необходимо выбрать в области 2 нужный метод шифрования (рисунок 10). Заполнить в области 2 все видимые поля (в зависимости от выбранного метода шифрования это могут быть «Ключ», «Второй ключ», «Третий ключ» и «Начальный вектор»). В области 1 в среднее текстовое поле ввести зашифрованное сообщение и нажать кнопку «Decrypt». Расшифрованное собщение отобразится в нижнем текстовом поле.
Рисунок 10. Выбор метода шифрования
5.5.2.3 Открытие / закрытие окна лог-файла
Окно лог файла открывается автоматически при запуске программы. Во время работы программы его можно закрывать и открывать нажатием на кнопку «Открыть/Закрыть окно TestWindow».
5.5.2.4 Сохраненить лог в файл
Результат последнего проведенного шифрования/дешифрования можно сохранить в отдельный файл с расширением «.txt». Для этого необходимо нажать кнопку «Сохранить лог в файл», в открывшемся диалоговом окне выбрать папку для сохранения файла и укакзать имя файла с расширением «.txt».
5.5.2.5 Очистить окно лог-файла
Для очистки окна лог-файла необходимо нажать кнопку «Очистить окно лог-файла».
5.5.2.6 Выход из программы
Для выхода из программы необходимо нажать на кнопку в верхнем правом углу главного окна программы.
Приложение А
КлассForm1
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace DESCryptography_Shvedov_Dm_A
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public Class_DES_SDmA DES = new Class_DES_SDmA();
public TestWindow TestW = new TestWindow();
public bool ButClose = false;
private void button1_Click(object sender, EventArgs e)
{
switch (comboBox1.SelectedIndex)
{
case (0):
{ //DES ECB ШИФРОВАНИЕ
DES = new Class_DES_SDmA();
byte[] message = Encoding.Default.GetBytes(textBox1.Text);
if (textBox4.Text.Length == 7)
{
byte[] key = Encoding.Default.GetBytes(textBox4.Text);
DES = new Class_DES_SDmA(message);
DES.SetKey(key);
byte[] Coded = DES.CRYPT_ECB();
textBox2.Text = Encoding.Default.GetString(Coded);
for (int i = 0; i < DES.Mas.Count; i++)
{
TestW.listBox1.Items.Add(DES.Mas[i]);
}
}
else { MessageBox.Show("Вы забыли ввести ключ. Длина ключа - 7 символов", "Внимание!"); }
break;
}
case (1):
{ // DES CBC ШИФРОВАНИЕ
byte[] message = Encoding.Default.GetBytes(textBox1.Text);
if (textBox4.Text.Length == 7)
{
if (textBox7.Text.Length == 8)
{
byte[] key = Encoding.Default.GetBytes(textBox4.Text);
DES = new Class_DES_SDmA(message);
DES.SetKey(key);
DES.SetVector(Encoding.Default.GetBytes(textBox7.Text));
byte[] Coded = DES.CRYPT_CBC();
textBox2.Text = Encoding.Default.GetString(Coded);
for (int i = 0; i < DES.Mas.Count; i++)
{
TestW.listBox1.Items.Add(DES.Mas[i]);
}
}
else { MessageBox.Show("Вы забыли ввести начальный вектор. Длина вектора - 8 символов", "Внимание!"); }
}
else { MessageBox.Show("Вы забыли ввести первый ключ. Длина ключа - 7 символов", "Внимание!"); }
break;
}
case (2):
{ // DES EEE3
DES = new Class_DES_SDmA();
byte[] message = Encoding.Default.GetBytes(textBox1.Text);
if (textBox4.Text.Length == 7)
{
if (textBox5.Text.Length == 7)
{
if (textBox6.Text.Length == 7)
{
byte[] key = Encoding.Default.GetBytes(textBox4.Text);
DES = new Class_DES_SDmA(message);
DES.SetFirstKey(key);
DES.SetSecondKey(Encoding.Default.GetBytes(textBox5.Text));
DES.SetThirdKey(Encoding.Default.GetBytes(textBox6.Text));
byte[] Coded = DES.CRYPT_EEE3();
textBox2.Text = Encoding.Default.GetString(Coded);
for (int i = 0; i < DES.Mas.Count; i++)
{
TestW.listBox1.Items.Add(DES.Mas[i]);
}
}
else { MessageBox.Show("Вы забыли ввести третий ключ. Длина ключа - 7 символов", "Внимание!"); }
}
else { MessageBox.Show("Вы забыли ввести второй ключ. Длина ключа - 7 символов", "Внимание!"); }
}
else { MessageBox.Show("Вы забыли ввести первый ключ. Длина ключа - 7 символов", "Внимание!"); }
break;
}
case (3):
{ // DES EDE3
byte[] message = Encoding.Default.GetBytes(textBox1.Text);
if (textBox4.Text.Length == 7)
{
if (textBox5.Text.Length == 7)
{
if (textBox6.Text.Length == 7)
{
byte[] key = Encoding.Default.GetBytes(textBox4.Text);
DES = new Class_DES_SDmA(message);
DES.SetFirstKey(key);
DES.SetSecondKey(Encoding.Default.GetBytes(textBox5.Text));
DES.SetThirdKey(Encoding.Default.GetBytes(textBox6.Text));
byte[] Coded = DES.CRYPT_EDE3();
textBox2.Text = Encoding.Default.GetString(Coded);
for (int i = 0; i < DES.Mas.Count; i++)
{
TestW.listBox1.Items.Add(DES.Mas[i]);
}
}
else { MessageBox.Show("Вы забыли ввести третий ключ. Длина ключа - 7 символов", "Внимание!"); }
}
else { MessageBox.Show("Вы забыли ввести второй ключ. Длина ключа - 7 символов", "Внимание!"); }
}
else { MessageBox.Show("Вы забыли ввести первый ключ. Длина ключа - 7 символов", "Внимание!"); }
break;
}
case (4):
{ // DES EEE2 ШИФРОВАНИЕ
byte[] message = Encoding.Default.GetBytes(textBox1.Text);
if (textBox4.Text.Length == 7)
{
if (textBox5.Text.Length == 7)
{
byte[] key = Encoding.Default.GetBytes(textBox4.Text);
DES = new Class_DES_SDmA(message);
DES.SetFirstKey(key);
DES.SetSecondKey(Encoding.Default.GetBytes(textBox5.Text));
byte[] Coded = DES.CRYPT_EEE2();
textBox2.Text = Encoding.Default.GetString(Coded);
for (int i = 0; i < DES.Mas.Count; i++)
{
TestW.listBox1.Items.Add(DES.Mas[i]);
}
}
else { MessageBox.Show("Вы забыли ввести второй ключ. Длина ключа - 7 символов", "Внимание!"); }
}
else { MessageBox.Show("Вы забыли ввести первый ключ. Длина ключа - 7 символов", "Внимание!"); }
break;
}
case (5):
{ // DES EDE2 ШИФРОВАНИЕ
byte[] message = Encoding.Default.GetBytes(textBox1.Text);
if (textBox4.Text.Length == 7)
{
if (textBox5.Text.Length == 7)
{
byte[] key = Encoding.Default.GetBytes(textBox4.Text);
DES = new Class_DES_SDmA(message);
DES.SetFirstKey(key);
DES.SetSecondKey(Encoding.Default.GetBytes(textBox5.Text));
byte[] Coded = DES.CRYPT_EDE2();
textBox2.Text = Encoding.Default.GetString(Coded);
for (int i = 0; i < DES.Mas.Count; i++)
{
TestW.listBox1.Items.Add(DES.Mas[i]);
}
}
else { MessageBox.Show("Вы забыли ввести второй ключ. Длина ключа - 7 символов", "Внимание!"); }
}
else { MessageBox.Show("Вы забыли ввести первый ключ. Длина ключа - 7 символов", "Внимание!"); }
break;
}
}
}
private void button2_Click(object sender, EventArgs e)
{
switch (comboBox1.SelectedIndex)
{
case (0):
{
DES = new Class_DES_SDmA();
byte[] message = Encoding.Default.GetBytes(textBox2.Text);
if (textBox4.Text.Length == 7)
{
byte[] key = Encoding.Default.GetBytes(textBox4.Text);
DES = new Class_DES_SDmA(message);
DES.SetKey(key);
byte[] Coded = DES.DeCRYPT_ECB();
textBox3.Text = Encoding.Default.GetString(Coded);
for (int i = 0; i < DES.Mas.Count; i++)
{
TestW.listBox1.Items.Add(DES.Mas[i]);
}
}
else { MessageBox.Show("Вы забыли ввести ключ. Длина ключа - 7 символов", "Внимание!"); }
break;
}
case (1):
{
// DES CBC ДеШИФРОВАНИЕ
byte[] message = Encoding.Default.GetBytes(textBox2.Text);
if (textBox4.Text.Length == 7)
{
if (textBox7.Text.Length == 8)
{
byte[] key = Encoding.Default.GetBytes(textBox4.Text);
DES = new Class_DES_SDmA(message);
DES.SetKey(key);
DES.SetVector(Encoding.Default.GetBytes(textBox7.Text));
byte[] Coded = DES.DeCRYPT_CBC();
textBox3.Text = Encoding.Default.GetString(Coded);
for (int i = 0; i < DES.Mas.Count; i++)
{
TestW.listBox1.Items.Add(DES.Mas[i]);
}
}
else { MessageBox.Show("Вы забыли ввести начальный вектор. Длина вектора - 8 символов", "Внимание!"); }
}
else { MessageBox.Show("Вы забыли ввести первый ключ. Длина ключа - 7 символов", "Внимание!"); }
break;
}
case (2):
{ // DES EEE3
DES = new Class_DES_SDmA();
byte[] message = Encoding.Default.GetBytes(textBox2.Text);
if (textBox4.Text.Length == 7)
{
if (textBox5.Text.Length == 7)
{
if (textBox6.Text.Length == 7)
{
byte[] key = Encoding.Default.GetBytes(textBox4.Text);
DES = new Class_DES_SDmA(message);
DES.SetFirstKey(key);
DES.SetSecondKey(Encoding.Default.GetBytes(textBox5.Text));
DES.SetThirdKey(Encoding.Default.GetBytes(textBox6.Text));
byte[] Coded = DES.DeCRYPT_EEE3();
textBox3.Text = Encoding.Default.GetString(Coded);
for (int i = 0; i < DES.Mas.Count; i++)
{
TestW.listBox1.Items.Add(DES.Mas[i]);
}
}
else { MessageBox.Show("Вы забыли ввести третий ключ. Длина ключа - 7 символов", "Внимание!"); }
}
else { MessageBox.Show("Вы забыли ввести второй ключ. Длина ключа - 7 символов", "Внимание!"); }
}
else { MessageBox.Show("Вы забыли ввести первый ключ. Длина ключа - 7 символов", "Внимание!"); }
break;
}
case (3):
{ // DES EDE3 ДеШИФРОВАНИЕ
byte[] message = Encoding.Default.GetBytes(textBox2.Text);
if (textBox4.Text.Length == 7)
{
if (textBox5.Text.Length == 7)
{
if (textBox6.Text.Length == 7)
{
byte[] key = Encoding.Default.GetBytes(textBox4.Text);
DES = new Class_DES_SDmA(message);
DES.SetFirstKey(key);
DES.SetSecondKey(Encoding.Default.GetBytes(textBox5.Text));
DES.SetThirdKey(Encoding.Default.GetBytes(textBox6.Text));
byte[] Coded = DES.DeCRYPT_EDE3();
textBox3.Text = Encoding.Default.GetString(Coded);
for (int i = 0; i < DES.Mas.Count; i++)
{
TestW.listBox1.Items.Add(DES.Mas[i]);
}
}
else { MessageBox.Show("Вы забыли ввести третий ключ. Длина ключа - 7 символов", "Внимание!"); }
}
else { MessageBox.Show("Вы забыли ввести второй ключ. Длина ключа - 7 символов", "Внимание!"); }
}
else { MessageBox.Show("Вы забыли ввести первый ключ. Длина ключа - 7 символов", "Внимание!"); }
break;
}
case (4):
{ // DES EEE2 ДеШИФРОВАНИЕ
byte[] message = Encoding.Default.GetBytes(textBox2.Text);
if (textBox4.Text.Length == 7)
{
if (textBox5.Text.Length == 7)
{
byte[] key = Encoding.Default.GetBytes(textBox4.Text);
DES = new Class_DES_SDmA(message);
DES.SetFirstKey(key);
DES.SetSecondKey(Encoding.Default.GetBytes(textBox5.Text));
byte[] Coded = DES.DeCRYPT_EEE2();
textBox3.Text = Encoding.Default.GetString(Coded);
for (int i = 0; i < DES.Mas.Count; i++)
{
TestW.listBox1.Items.Add(DES.Mas[i]);
}
}
else { MessageBox.Show("Вы забыли ввести второй ключ. Длина ключа - 7 символов", "Внимание!"); }
}
else { MessageBox.Show("Вы забыли ввести первый ключ. Длина ключа - 7 символов", "Внимание!"); }
break;
}
case (5):
{ // DES EDE2 ДеШИФРОВАНИЕ
byte[] message = Encoding.Default.GetBytes(textBox2.Text);
if (textBox4.Text.Length == 7)
{
if (textBox5.Text.Length == 7)
{
byte[] key = Encoding.Default.GetBytes(textBox4.Text);
DES = new Class_DES_SDmA(message);
DES.SetFirstKey(key);
DES.SetSecondKey(Encoding.Default.GetBytes(textBox5.Text));
byte[] Coded = DES.DeCRYPT_EDE2();
textBox3.Text = Encoding.Default.GetString(Coded);
for (int i = 0; i < DES.Mas.Count; i++)
{
TestW.listBox1.Items.Add(DES.Mas[i]);
}
}
else { MessageBox.Show("Вы забыли ввести второй ключ. Длина ключа - 7 символов", "Внимание!"); }
}
else { MessageBox.Show("Вы забыли ввести первый ключ. Длина ключа - 7 символов", "Внимание!"); }
break;
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
TestW = new TestWindow();
TestW.Show();
comboBox1.SelectedIndex = 0;
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
switch (comboBox1.SelectedIndex)
{
case (0):
{
// ECB
label4.Visible = false;
label5.Visible = false;
textBox5.Visible = false;
textBox6.Visible = false;
textBox7.Visible = false;
label6.Visible = false;
break;
}
case (1):
{
// CBC
label4.Visible = false;
label5.Visible = false;
textBox5.Visible = false;
textBox6.Visible = false;
label6.Visible = true;
textBox7.Visible = true;
break;
}
case (2):
{
// EEE3
label4.Visible = true;
label5.Visible = true;
textBox5.Visible = true;
textBox6.Visible = true;
textBox7.Visible = false;
label6.Visible = false;
break;
}
case (3):
{
// EDE3
label4.Visible = true;
label5.Visible = true;
textBox5.Visible = true;
textBox6.Visible = true;
textBox7.Visible = false;
label6.Visible = false;
break;
}
case (4):
{ // EEE2
label4.Visible = true;
label5.Visible = false;
textBox5.Visible = true;
textBox6.Visible = false;
textBox7.Visible = false;
label6.Visible = false;
break;
}
case (5):
{ // EDE2
label4.Visible = true;
label5.Visible = false;
textBox5.Visible = true;
textBox6.Visible = false;
textBox7.Visible = false;
label6.Visible = false;
break;
}
}
}
private void button3_Click(object sender, EventArgs e)
{
string puth = "";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
puth = saveFileDialog1.FileName;
StreamWriter Str = new StreamWriter(puth);
foreach (string s in DES.Mas)
{
Str.WriteLine(s);
}
Str.Close();
}
}
private void button4_Click(object sender, EventArgs e)
{
TestW.listBox1.Items.Clear();
}
private void button5_Click(object sender, EventArgs e)
{
if (ButClose)
{
TestW = new TestWindow();
TestW.Show();
button5.Text = "Закрыть окно TestWindow";
ButClose = false;
}
else
{
TestW.Close();
button5.Text = "Открыть окно TestWindow";
ButClose = true;
}
} } }