Режимы работы блочных шифров

Автор: Пользователь скрыл имя, 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

Файлы: 1 файл

контрольная по ИБ.docx

— 149.59 Кб (Скачать)

Министерство образования  и науки РФ

Северный (Арктический) федеральный университет

Институт информационных и космических технологий

 
 

Кафедра вычислительных систем и телекоммуникаций

 
 

(наименование кафедры)

 
     
     
 

(фамилия, имя, отчество  студента)

 
     
 

Институт

 

курс

 

группа

     
     
     
     
 

КОНТРОЛЬНАЯ  РАБОТА

 
     
 

По дисциплине

Информационная безопасность и защита информации

 
     
 

На тему

Режимы работы блочных  шифров

 
   

(наименование темы)

 
     
     
                 
             
                 
                 
                 
         
 

Отметка о зачёте

         
             

(дата)

 
                 
         
 

Руководитель 

           
     

(должность)

 

(подпись)

 

(и.,о., фамилия)

 
               
     

(дата)

         
                 
                 
                 
 

Архангельск

 

2012

 

ЗАДАНИЕ

Написать программу для  шифрования и расшифрования сообщений с помощью блочный шифров (ECB, CBC, OFB, CTR, CFB).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ЛИСТ ДЛЯ ЗАМЕЧАНИЙ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ           5

1 ОПИСАНИЕ ПРОГРАММЫ        6

2 ПРОЕКТИРОВАНИЕ ПРИЛОЖЕНИЯ      7

3 СХЕМА РАБОТЫ ПРОГРАММЫ       9

3.1 Принцип работы программы               10

ЗАКЛЮЧЕНИЕ                  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_enterText.Text, 0, tbx_enterText.Text.Length, inData, 0);

          

            //шифр ЕСВ

            if (chk_ECB.Checked)

            {

                tbx_shifrText.Clear();//очистка TextBox с зашифрованным текстом

                tbx_deshifrText.Clear();//очистка TextBox c расшифрованным текстом

 

                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(bufEncData);

                        location++;

                    }

                }

                my_aes.Cipher(buff, bufEncData);//Шифрование входящий в выходящий блок

                bufEncData.CopyTo(encData, location * 16);//переводим в одномерный массив

                Array.Clear(buff, 0, buff.Length);//обнуляем элементы массива

                tbx_shifrText.Text += Encoding.Unicode.GetString(bufEncData);//перевод массива байтов в строку и вывод в TextBox

 

                flag = 1;

 

            }

            //Шифр CBC----------------------------------------------------------

            if (chk_CBC.Checked)

            {

                tbx_shifrText.Clear();//очистка TextBox с зашифрованным текстом

                tbx_deshifrText.Clear();//очистка TextBox c расшифрованным текстом

 

                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);//перевод массива байтов в строку и вывод в TextBox

                        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(bufEncData);

                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(buff);

                        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(buff);

                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(buff);

                        Array.Clear(buff, 0, buff.Length);

Информация о работе Режимы работы блочных шифров