Автор: Пользователь скрыл имя, 17 Ноября 2012 в 15:07, контрольная работа
В данной контрольной работе рассматривается реализация программ блочного шифрования данных на языке C# в пяти режимах (ECB, CBC, OFB, CTR, CFB).
В качестве среды разработки выбрана Microsoft Visual Studio 2010.
ВВЕДЕНИЕ 5
1 ОПИСАНИЕ ПРОГРАММЫ 6
2 ПРОЕКТИРОВАНИЕ ПРИЛОЖЕНИЯ 7
3 СХЕМА РАБОТЫ ПРОГРАММЫ 9
3.1 Принцип работы программы 10
ЗАКЛЮЧЕНИЕ 11
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 12
ПРИЛОЖЕНИЕ А 13
Министерство образования и науки РФ | ||||||||||||||||
Северный (Арктический) федеральный университет Институт информационных и космических технологий | ||||||||||||||||
Кафедра вычислительных систем и телекоммуникаций |
||||||||||||||||
(наименование кафедры) |
||||||||||||||||
(фамилия, имя, отчество студента) |
||||||||||||||||
Институт |
курс |
группа |
||||||||||||||
КОНТРОЛЬНАЯ РАБОТА |
||||||||||||||||
По дисциплине |
Информационная безопасность и защита информации |
|||||||||||||||
На тему |
Режимы работы блочных шифров |
|||||||||||||||
(наименование темы) |
||||||||||||||||
Отметка о зачёте |
||||||||||||||||
(дата) |
||||||||||||||||
Руководитель |
||||||||||||||||
(должность) |
(подпись) |
(и.,о., фамилия) |
||||||||||||||
(дата) |
||||||||||||||||
Архангельск |
2012
ЗАДАНИЕ
Написать программу для шифрования и расшифрования сообщений с помощью блочный шифров (ECB, CBC, OFB, CTR, CFB).
ЛИСТ ДЛЯ ЗАМЕЧАНИЙ
ОГЛАВЛЕНИЕ
ВВЕДЕНИЕ 5
1 ОПИСАНИЕ ПРОГРАММЫ 6
2 ПРОЕКТИРОВАНИЕ ПРИЛОЖЕНИЯ
3 СХЕМА РАБОТЫ ПРОГРАММЫ 9
3.1 Принцип работы программы
ЗАКЛЮЧЕНИЕ 11
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 12
ПРИЛОЖЕНИЕ А 13
ВВЕДЕНИЕ
В данной контрольной работе рассматривается реализация программ блочного шифрования данных на языке C# в пяти режимах (ECB, CBC, OFB, CTR, CFB).
В качестве среды разработки выбрана Microsoft Visual Studio 2010.
1 ОПИСАНИЕ ПРОГРАММЫ
Программа реализована на Windows Forms. То есть представляет собой окно, в котором можно выбрать с помощью контрола checkbox один из пяти режимов шифрования.
Исходный текст вводится в верхний textbox. Функциональность вывода шифрованного (расшифрованного) текста достигается с помощью кнопок (buttons).
Реализована возможность стирания введенного текста, с помощью кнопки («Стереть»).
Программа является законченным продуктом не требующей дополнительной функциональности. Предъявляет минимальные требования к аппаратным ресурсам. Имеет интуитивно понятный интерфейс.
2 ПРОЕКТИРОВАНИЕ ПРИЛОЖЕНИЯ
Программа представляет собой оконное приложение с простым интерфейсом, позволяющим производить ввод данных и получать результат работы.
Рисунок 1 – Внешний вид программы
Интерфейс позволяет ввести исходные данные и, выбрав необходимый режим шифрования, получить результат.
Рисунок 2 – Пример работы программы
3 СХЕМА РАБОТЫ ПРОГРАММЫ
Рисунок 3 – Блок – схема программы
3.1 Принцип работы программы
При запуске программы пользователю предлагается ввести нужные для шифрования данные. После этого поставить галочку для выбора нужного режима шифрования. Нажать кнопку «Зашифровать». Введенная строка зашифруется согласно выбранному алгоритму шифрования. Чтобы расшифровать строку необходимо нажать кнопку «Расшифровать». В случае неверно введенных данных у пользователя есть возможность стереть эти данные, нажав кнопку стереть.
Программа обрабатывает ошибки. Если в случае шифрования текста с помощью одного алгоритма, сделать попытку расшифровать текст другим алгоритмом шифрования программа выдаст сообщение о невозможности такой операции. Данный недочет был устранен введением дополнительного признака шифрования, который проверяется при расшифровывании.
В программе не предусмотрено разделение полномочий на администраторские и пользовательские.
ЗАКЛЮЧЕНИЕ
В данной контрольной работе была реализована программа блочного шифрования данных с использованием различных режимов шифрования (ECB, CBC, OFB, CTR, CFB).
Для выполнения данной контрольной работы использовался язык программирования C#, как один из наиболее современных языков программирования.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1 Троелсен Э. Язык программирования C# 2008 и платформа .NET 3.5 4-е изд.: Пер. с англ – М. : ООО «И.Д.Вильямс», 2010. – 1344 с.
2 Трэй Нэш C# 2008 ускоренный курс для профессионалов. : Пер. с англ. – М. : ООО «И.Д. Вильямс», 2008. – 576 с.
3 Герберт Шилд Полный справочник по C#. : Пер. с англ. – М. : Издательский дом «Вильямс», 2004. – 752 с.
ПРИЛОЖЕНИЕ А
(обязательное)
Фрагмент кода программы
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private static Aes.KeySize keysize = Aes.KeySize.Bits128;
private byte[] iv = new byte[16];
private byte[] inData = new byte[256];
private byte[] encData = new byte[256];
private byte[] decData = new byte[16];
private byte[] buff = new byte[16];
private byte[] bufEncData = new byte[16];
private static int flag = 0;
Aes my_aes = new Aes(keysize, new byte[16]);
private void Form1_Load(object sender, EventArgs e)
{
chk_ECB.Checked = true;
}
//----------------------------
private void ErrMes()
{
string[] code = { "ECB", "CBC", "OFB", "CTR", "CFB" };
MessageBox.Show("Строка закодирована кодировкой " + code[flag - 1]);
}
//----------------------------
private void bt_Encoding_Click(object sender, EventArgs e)
{
//кодирует набор символов из указанного объекта в массив байтов
Encoding.Unicode.GetBytes(tbx_
//шифр ЕСВ
if (chk_ECB.Checked)
{
tbx_shifrText.Clear();//
tbx_deshifrText.Clear();//
int location = 0;//позиция
for (int i = 0; i <= tbx_enterText.Text.Length*2; i++)
{
buff[i % 16] = inData[i];
if ((i + 1) % 16 == 0)
{
my_aes.Cipher(buff, bufEncData);
bufEncData.CopyTo(encData, location * 16);
Array.Clear(buff, 0, buff.Length);
tbx_shifrText.Text += Encoding.Unicode.GetString(
location++;
}
}
my_aes.Cipher(buff, bufEncData);//Шифрование входящий в выходящий блок
bufEncData.CopyTo(encData, location * 16);//переводим в одномерный массив
Array.Clear(buff, 0, buff.Length);//обнуляем элементы массива
tbx_shifrText.Text += Encoding.Unicode.GetString(
flag = 1;
}
//Шифр CBC---------------------------
if (chk_CBC.Checked)
{
tbx_shifrText.Clear();//
tbx_deshifrText.Clear();//
int location = 0;
byte[] vi = new byte[16];
iv.CopyTo(vi, 0);
for (int i = 0; i <= tbx_enterText.Text.Length * 2; i++)
{
buff[i % 16] = inData[i];
buff[i % 16] = (byte)(buff[i % 16] ^ vi[i % 16]);
if ((i + 1) % 16 == 0)
{
my_aes.Cipher(buff, bufEncData);//Шифрование входящий и выходящий блок
bufEncData.CopyTo(encData, location * 16);//переводим в одномерный массив
Array.Clear(buff, 0, buff.Length);//обнуляем элементы массива
tbx_shifrText.Text += Encoding.Unicode.GetString(
bufEncData.CopyTo(vi, 0);
location++;
}
}
my_aes.Cipher(buff, bufEncData);
bufEncData.CopyTo(encData, location * 16);
Array.Clear(buff, 0, buff.Length);
tbx_shifrText.Text += Encoding.Unicode.GetString(
flag = 2;
}
//Шифр OFB
if (chk_OFB.Checked)
{
tbx_shifrText.Clear();
tbx_deshifrText.Clear();
int location = 0;
byte[] vi = new byte[16];
iv.CopyTo(vi, 0);
for (int i = 0; i <= tbx_enterText.Text.Length * 2; i++)
{
buff[i % 16] = inData[i];
if ((i + 1) % 16 == 0)
{
my_aes.Cipher(vi, bufEncData);
bufEncData.CopyTo(vi, 0);
for (int z = 0; z < 16; z++)
{
buff[z] = (byte)(buff[z] ^ bufEncData[z]);
}
buff.CopyTo(encData, location * 16);
tbx_shifrText.Text += Encoding.Unicode.GetString(
Array.Clear(buff, 0, buff.Length);
location++;
}
}
my_aes.Cipher(vi, bufEncData);
for (int z = 0; z < 16; z++)
{
buff[z] = (byte)(buff[z] ^ bufEncData[z]);
}
buff.CopyTo(encData, location * 16);
tbx_shifrText.Text += Encoding.Unicode.GetString(
Array.Clear(buff, 0, buff.Length);
flag = 3;
}
//Шифр CTR
if (chk_CTR.Checked)
{
tbx_shifrText.Clear();
tbx_deshifrText.Clear();
int location = 0;
byte count = 0;
byte[] vi = new byte[16];
iv.CopyTo(vi, 0);
vi[15] = count;
for (int i = 0; i <= tbx_enterText.Text.Length * 2; i++)
{
buff[i % 16] = inData[i];
if ((i + 1) % 16 == 0)
{
my_aes.Cipher(vi, bufEncData);
for (int z = 0; z < 16; z++)
{
buff[z] = (byte)(buff[z] ^ bufEncData[z]);
}
buff.CopyTo(encData, location * 16);
tbx_shifrText.Text += Encoding.Unicode.GetString(
Array.Clear(buff, 0, buff.Length);