Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа 3 Тема работы- Асимметричный алгоритм шифрования RS Цель работы - Изучить принцип раб

Работа добавлена на сайт samzan.net: 2016-06-09

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 18.5.2024

Змн.

Арк.

№ докум.

Підпис

Дата

Арк.

3

8.050103.5151.14.03

Змн.

Арк.

№ докум.

Підпис

Дата

Арк.

3

8.050103.5151.14.03

Змн.

Арк.

№ докум.

Підпис

Дата

Арк.

1

8.050103.5151.14.03

Студент:

Паламарчук.Ю

Викладач:

Устенко І.В.

Блочные составные шифры. Сеть Фейстеля

Літ.

Аркушів

8

НУК ім. Адм. Макарова

Лабораторная работа № 3

Тема работы: Асимметричный алгоритм шифрования RSA

Цель работы : Изучить принцип работы асимметричных алгоритмов шифрования на примере алгоритма RSA. Освоить методику создания комбинированных алгоритмов шифрования, которые совмещают достоинства методов симметричной и асимметричной криптографии.

Задание :

Результатом данной лабораторной работы должны являться приложения, совмещающие в себе достоинства симметричных и асимметричных методов шифрования.

I. Реализовать приложение для шифрования, позволяющее:

1. Вычислять открытый и закрытый ключи для алгоритма RSA:

1) числа и генерируются программой или задаются из файла;

2) числа и должны быть больше, чем;

3) сгенерированные ключи сохраняются в файлы: открытый ключ ( ) – в один файл, закрытый ( ) – в другой.

2. Шифровать указанным в варианте симметричным алгоритмом открытый текст, а асимметричным – ключ симметричного алгоритма:

1) шифруемый текст должен храниться в одном файле, открытый ключ ( ) для алгоритма RSA – в другом;

2) ключ для симметричного алгоритма должен генерироваться случайным образом;

3) зашифрованный текст должен сохраняться в одном файле, а зашифрованный асимметричным алгоритмом ключ симметричного алгоритма – в другом;

4) в процессе шифрования предусмотреть возможность просмотра и изменения шифруемого текста в шестнадцатеричном и символьном виде;

5) программа должна уметь работать с текстом произвольной длины.

II. Реализовать приложение для дешифрования.

1. Зашифрованный текст должен храниться в одном файле, зашифрованный ключ симметричного алгоритма – в другом, а секретный ключ для алгоритма RSA – в третьем. 3

2. Приложение расшифровывает зашифрованный ключ с помощью алгоритма RSA, а затем с помощью симметричного алгоритма с ключом расшифровывает зашифрованный текст.

3. Расшифрованный текст должен сохраняться в файл.

4. В процессе дешифрования предусмотреть возможность просмотра и изменения зашифрованного текста в шестнадцатеричном и символьном виде.

5. Программа должна уметь работать с текстом произвольной длины.

III. С помощью реализованных приложений выполнить следующие задания.

1. Протестировать правильность работы разработанных приложений.

2. Сделать выводы о проделанной работе.

Теоритические сведения:

Алгоритм RSA состоит из следующих пунктов:

Выбрать простые числа p и q

Вычислить n = p * q

Вычислить m = (p - 1) * (q - 1)

Выбрать число d взаимно простое с m

Выбрать число e так, чтобы e * d = 1 (mod m)

Числа e и d являются ключами RSA. Шифруемые данные необходимо разбить на блоки - числа от 0 до n - 1. Шифрование и дешифровка данных производятся следующим образом:

Шифрование: b = a^(mod n)

Дешифровка: a = b^d (mod n)

Следует также отметить, что ключи e и d равноправны, т.е. сообщение можно шифровать как ключом e, так и ключом d, при этом расшифровка должна быть произведена с помощью другого ключа.

Пример:

 Рисунок 1  - Пример работы RSA

Симметричные алгоритмы и, в частности, DES – быстрые, поэтому ими удобно шифровать большие объѐмы информации. Однако для передачи ключа симметричного алгоритма требуется надѐжный канал передачи, который очень часто отсутствует. Таким образом, преимущества таких алгоритмов сводятся на нет. С другой стороны, асимметричные алгоритмы не требуют секретного канала для передачи ключа, но на практике криптосистемы с открытым ключом используются для шифрования не сообщений, а ключей. На это есть две основные причины:

1. Алгоритмы шифрования с открытым ключом в среднем работают в тысячи раз медленнее, чем симметричные алгоритмы, а также они требовательны к памяти и вычислительной мощности компьютера, поэтому большие тексты кодировать этими алгоритмами нецелесообразно.

2. Алгоритмы шифрования с открытым ключом уязвимы по отношению к криптоаналитическим атакам со знанием открытого текста. Пусть ( ), где обозначает шифртекст, – открытый текст, – функцию шифрования. Тогда, если принимает значения из некоторого конечного множества, состоящего из открытых текстов, криптоаналитику достаточно зашифровать все эти тексты, используя известный ему открытый ключ, и сравнить результаты с. Ключ таким способом ему вскрыть не удастся, однако открытый текст будет успешно определѐн.

Возможно следующее решение: сообщение шифруется симметричным алгоритмом, что позволяет выиграть в скорости, т.к. сообщение может быть сколь угодно большим, а ключ симметричного алгоритма (обычно маленький, для DES – 64 бита) шифруется асимметричным алгоритмом.

Хід роботи:

Текст програми представлено в додатку А.

Результати роботи програми:

Рисунок 2 – Открываем программу Асимметричный алгоритм шифрования RSA

Рисунок 3 – Выбираем путь файла шифруемого текста

Вводим p и q как указано в примере 7 и 17, получаем ключи Открытый (5, 119) и закритий (77,119) как показано на рисунке – 4.

Рисунок 4 – Ввод P и Q 

Шифруем текст нажимаем на кнопку «Шифровать» как показано на рисунке 5.

Рисунок 5 – Шифрование текст

Расшифруем файл как показано на рисунке 6, Дешифрование успешно! Получаем текст исходного файла

Рисунок 6 – Дешифрование текста

Висновок: В ході цієї лабораторної роботи було створено програму, яка шифрує за допомогою асимметричного алгоритму шифруванния RSA, та отримав навички шифрування даних за допомогою асимметричного алгоритму шифруванния RSA.

Додаток А. Код програми

Form1.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.IO;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace RSA

{

   public partial class Form1 : Form

   {   

     

       string Resurs, func = "";

       public long P, Q, D, E, M, N = 0;

       public long[] Texthight;       

   

       public Form1()

       {

           InitializeComponent();

           #region FileDialog Settings

           openFileDialog1.DefaultExt = "txt";

           openFileDialog1.Filter = "Текстовые документы|*.txt";

           openFileDialog1.Title = "Открыть документ";

           openFileDialog1.Multiselect = false;

           #endregion

       }

       private void Form1_Load(object sender, EventArgs e)

       {

       }

       private void OpenDocument()       // Функция открытия документа

       {

           openFileDialog1.FileName = string.Empty;

           if (openFileDialog1.ShowDialog() == DialogResult.OK)

           {

               func = openFileDialog1.FileName;

               Encoding enc = Encoding.GetEncoding(1251);

               try

               {

                   // Чтение файла

                   StreamReader sr = new StreamReader(func, enc); //Открывает поток для чтения файла

                   textBox2.Text = sr.ReadToEnd(); // Считываем документ до конца

                   textBox2.SelectionStart = textBox2.TextLength;

                   sr.Close(); // Закрываем поток

               }

               catch (Exception exc) // Отлавливаем ошибку

               {

                   MessageBox.Show("Ошибка чтения файла.\n"

                       + exc.ToString(), "Error!",

                       MessageBoxButtons.OK,

                       MessageBoxIcon.Error);

               }

           }

       }

       private void button2_Click(object sender, EventArgs e)

       {

           OpenDocument();

           label5.Text = Convert.ToString(textBox2.TextLength);

           label4.Visible = true;

       }

       // Наибольший общий делитель

       private static long gcd(long x, long y)

       {

           long g;

           g = y;

           while (x > 0) // Пока не равен 0

           {

               g = x;

               x = y % x;

               y = g;

           }

           return g;

       }

       // Проверка на взаимопростоту

       private static long MutuallySimple(long m)

       {

           Random rd = new Random(DateTime.Now.Millisecond);

           int tmp_d;

           long d = 0, check;

           bool quit = false;

           while (quit == false)

           {

               tmp_d = rd.Next(2, 100);

               d = Convert.ToInt64(tmp_d);

               check = gcd(m, d);

               if (check == 1) // Если = 1 то простое число

               {

                   quit = true;

               }

           }

           return d;

       }

       // Расширенный алгоритм Евклида

       private static long ExtGCD(long x, long y)

       {

           long a, b, q, r, u1, u2;

           long t;

           a = Convert.ToInt64(x);

           b = Convert.ToInt64(y);

           u1 = 1;

           u2 = 0;

           while (b != 0)

           {

               q = a / b;

               r = a % b;

               a = b; b = r;

               t = u2;

               u2 = u1 - q * u2;

               u1 = t;

           }

           return u1;

       }

       private void button1_Click(object sender, EventArgs e)

       {

            if (PTextBox.Text.Length == 0 && QTextBox.Text.Length == 0 )

           {

               MessageBox.Show("Введите значение P и Q!");           

               return;

           } else if (PTextBox.Text.Length == 0)

           {

               MessageBox.Show("Введите значение P!");

               return;

           }

           else if (QTextBox.Text.Length == 0)

           {

               MessageBox.Show("Введите значение Q!");

               return;

           }

           P = Convert.ToUInt32(PTextBox.Text);

           Q = Convert.ToUInt32(QTextBox.Text);

           N = P * Q;

           M = (P-1) * (Q-1);

           D = MutuallySimple(M);

           long tmp_E;

           tmp_E = ExtGCD(D, M);

           if (tmp_E <= 0)

           {

               while (tmp_E < 0)

               {

                   D = MutuallySimple(M);

                   tmp_E = ExtGCD(D, M);

               }

           }

           E = Convert.ToInt64(tmp_E);

           p_label.Text = "p = " + Convert.ToString(P);

           q_label.Text = "q = " + Convert.ToString(Q);

           e_label.Text = "e = " + Convert.ToString(E);

           d_label.Text = "d = " + Convert.ToString(D);

           n_label.Text = "n = " + Convert.ToString(N);

           m_label.Text = "m = " + Convert.ToString(M);

           label9.Text = "Открытый : (" + Convert.ToString(E) + ", " + Convert.ToString(N) + ") ";

           label10.Text = "Закрытый : (" + Convert.ToString(D) + ", " + Convert.ToString(N) + ") ";

       }

       private void button5_Click(object sender, EventArgs e)

       {

           p_label.Text = "0";

           q_label.Text = "0";

           n_label.Text = "0";

           m_label.Text = "0";

           d_label.Text = "0";

           e_label.Text = "0";

       }

       public struct Key

       {

           public long index;

           public long N;

           public Key(long lIndex, long lN)

           {

               index = lIndex;

               N = lN;

           }

       }

       public static long[] Process(long[] src_text, Key oKey)

       {

           long[] ciphertext = new long[src_text.Length];

           int length = src_text.Length;

           for (int i = 0; i < length; i++)

           {

               ciphertext[i] = ModularExponantiation(src_text[i], oKey);

           }

           return ciphertext;

       }

       public static long ModularExponantiation(long num, Key oKey)

       {

           long C = 1;

           long E = 0;

           while (E++ < oKey.index)

           {

               C = (C * num) % oKey.N;

           }

           return C;

       }

       private void button3_Click(object sender, EventArgs e)

       {

           Shifraciya shif = new Shifraciya();

          

           if (textBox2.Text.Length == 0)

           {

               MessageBox.Show("Нет текста для шифрации");

               return;

           }

           ResultTextBox.ResetText();

           textBox1.ResetText();

           Key publicKey = new Key(E, N);

           Resurs = textBox2.Text;

           Texthight = shif.Encode(Resurs, publicKey);

           for (int i = 0; i < Texthight.Length - 1; i++)

           {

               textBox1.Text += Convert.ToString(Convert.ToChar(Texthight[i]));

               ResultTextBox.Text += Texthight[i];

               ResultTextBox.Text += " ";

           }

           label8.Text = Convert.ToString(ResultTextBox.TextLength);

       }

       private void button4_Click(object sender, EventArgs e)

       {

           DeShifraciya deShif = new DeShifraciya();

           if (ResultTextBox.Text.Length == 0)

           {

               MessageBox.Show("Нет текста для дешифрации");

               return;

           }

           //ResultTextBox.ResetText();

           Key privateKey = new Key(D, N);

           textBox3.Text = deShif.Decode(Texthight, privateKey);

           label8.Text = Convert.ToString(ResultTextBox.TextLength);

           if (textBox2.Text ==  textBox3.Text)

           {

               label1.Visible = true;

               label1.Text = "Дешифрование успешно!";

               label1.ForeColor = Color.Green;

           }

           else

           {

               label1.Visible = true;

               label1.Text = "Дешифрование неудачно!";

               label1.ForeColor = Color.Red;

           }

       }

       private void textBox2_TextChanged(object sender, EventArgs e)

       {

           label5.Text = Convert.ToString(textBox2.TextLength);

       }

   }

}

Shifraciya.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace RSA

{

   class Shifraciya : Form1

   {

       public long[] Encode(string sMessage, Key oKey)

       {

           long[] numericMessage = new long[sMessage.Length];

           int length = sMessage.Length;

           for (int i = 0; i < length; i++)

           {

               numericMessage[i] = (long)sMessage[i];

           }

           return Process(numericMessage, oKey);

       }

   }

}

Deshifraciya.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace RSA

{

   class DeShifraciya : Form1

   {

       public string Decode(long[] numericMessage, Key oKey)

       {

           long[] processedMessage = Process(numericMessage, oKey);

           StringBuilder message = new StringBuilder();

           int length = processedMessage.Length;

           for (int i = 0; i < length; i++)

           {

               message.Append((char)processedMessage[i]);

           }

           return message.ToString();

      }

   }

}




1. С 1990 г. в стране действует закон об ответственности за изготовление недоброкачественной продукции который
2. 10 сентября 2006г
3. постоянно повторяющееся участие в азартной игре которое продолжается и углубляется несмотря на социальны
4. ЛЕКЦИЯ 1 ИНФОРМАЦИОННЫЕ РЕСУРСЫ 1
5. выражение равное разности произведения элементов стоящих на главной и побочной диагоналях
6. Моя любимая страна край семья 1
7. тема С течением времени возросло наше чувство ответственности перед экологией.
8. тематическая теория связи изданной в 1946г
9. Основы религиозных культур и светской этики Глава 4
10. Політична влада- сутність, форми та роль у функціонуванні політичної системи
11. mgi от греч. понятие используемое для описания системы мышления при которой человек обращается к
12.  Особенности тактики допроса при расследовании преступлений совершаемых организованными престу
13. BOILED EGG BSENT TRETMENT HELPING FREDDIE RLLYING ROUND OLD GEORGE DOING CLRENCE BIT OF GOOD THE UNT ND THE SLUGGRD LEVE IT TO JEEVES Jeeve
14. Mr 19th 2012 t 7-08 M Как связан либерализм и толерантность равноправие полов и прочие достижения ев
15. органической русской философии были западники и славянофилы
16. С Нелегальная миграция на Дальнем Востоке РФ Дальним Востоком России в настоящее время принято считать т
17.  Гусеничная тележка Гусеничная тележка рис
18. Основные динамические свойства и их классификация
19. БРСМ г Минска Постановление Бюро Заводского РК ОО БРСМ г
20. Виробництво бубличних виробі