Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет Л3.docx
Скачиваний:
2
Добавлен:
18.07.2022
Размер:
39.62 Кб
Скачать

Санкт-Петербургский политехнический университет Петра Великого

Институт компьютерных наук и технологий

Высшая школа интеллектуальных систем и суперкомпьютерных технологий лабораторная работа №3 «Симметричные криптосистемы»

по дисциплине «Информационная безопасность»

Выполнил

студент гр. 3530903/80001 А. В. Шильникова

Руководитель А. В. Сергеев

«___» __________ 2021 г.

Санкт-Петербург

2021

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

Вариант 2: Создайте программу шифрования – дешифрования методом аффинной подстановки Цезаря для русского языка. Создайте программу взлома методом перебора.

Алгоритмы шифрования и расшифровки методом аффинной подстановки Цезаря.

В данном преобразовании буква, соответствующая числу t, заменяется на букву, соответствующую числовому значению (at +b) по модулю m. Необходимо, чтобы наибольший общий делитель чисел a и m, обозначаемый как НОД (а, m) был равен единице, т. е. а и m должны быть взаимно простыми числами. Например, пусть m = 26, а = 3, b = 5. Тогда, очевидно, НОД (3, 26) = 1, и мы получаем следующее соответствие между числовыми кодами букв:

Преобразуя числа в буквы английского языка, получаем следующее соответствие для букв открытого текста и шифрованного текста:

В данной системе ключом являются два числа (а, b). Таким образом число возможных ключей увеличивается. Однако, числа (а, b) не должны превышать размера алфавита, поэтому количество возможных ключей остаётся невелико. Взлом шифра может быть осуществлён как перебором ключей, так и используя частоту появления разных букв в тексте.

Алгоритм взлома перебором.

Каждое слово (уникальное, длиной больше 3 символов) текста, который необходимо взломать, записывается в список. Также записываются слова из словаря («Записки охотника»). Взлом реализован методом перебора ключей в двух циклах. Для каждой подобранной пары расшифровывается каждое слово зашифрованного текста и идет проверка на наличие этого слова в словаре. При нахождении в словаре 500 уникальных слов, считается, что пара подобрана и циклы прекращаются.

Код программы шифрования/дешифрования

private static char[] _alphabet = { 'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я' }; public Form1() { InitializeComponent(); } private static int CheckKey(string s) { var x = 32; var y = int.Parse(s); while (x != y) { if (x > y) x -= y; else y -= x; } return x; } private static char[] Caesar(char[] alph, int a, int b) { char[] newAlph = new char[32]; for (int i = 0; i < 32; i++) { newAlph[i] = alph[(a * i + b) % 32]; } return newAlph; } private static string Encrypt(int a, int b, string filePath) { char[] newAlph = Caesar(_alphabet, a, b); Regex rgx = new Regex("[^а-я ]"); string s = rgx.Replace(File.ReadAllText(filePath).ToLower(), ""); string result = ""; foreach (char c in s) { if (c != ' ') for (int i = 0; i < 32; i++) { if (c == _alphabet[i]) { result += newAlph[i]; break; } } else result += ' '; } return result; } [SuppressMessage("ReSharper.DPA", "DPA0002: Excessive memory allocations in SOH", MessageId = "type: System.String")] private static string Decrypt(int a, int b, string filePath) { char[] newAlph = Caesar(_alphabet, a, b); Regex rgx = new Regex("[^а-я ]"); string s = rgx.Replace(File.ReadAllText(filePath).ToLower(), ""); string result = ""; foreach (char c in s) { if (c != ' ') for (int i = 0; i < 32; i++) { if (c == newAlph[i]) { result += _alphabet[i]; break; } } else result += ' '; } return result; } private void button3_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "Text files(*.txt)|*.txt"; if (openFileDialog.ShowDialog() == DialogResult.OK) { textBox1.Text = openFileDialog.FileName; } } [SuppressMessage("ReSharper.DPA", "DPA0002: Excessive memory allocations in SOH", MessageId = "type: System.String")] private void but_encrypt_Click(object sender, EventArgs e) { int key1 = int.Parse(textBox2.Text); int key2 = int.Parse(textBox3.Text); if (CheckKey(textBox2.Text) == 1 && textBox2.Text.Length >= 1 && textBox3.Text.Length >= 1 && key1 < 32 && key2 < 32) { label4.Visible = false; SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "Text files(*.txt)|*.txt"; if (saveFileDialog.ShowDialog() == DialogResult.OK) { File.WriteAllText(saveFileDialog.FileName, Encrypt(key1, key2, textBox1.Text)); } } else label4.Visible = true; } private void but_decrypt_Click(object sender, EventArgs e) { int key1 = int.Parse(textBox2.Text); int key2 = int.Parse(textBox3.Text); if (CheckKey(textBox2.Text) == 1 && textBox2.Text.Length >= 1 && textBox3.Text.Length >= 1 && key1 < 32 && key2 < 32) { label4.Visible = false; SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "Text files(*.txt)|*.txt"; if (saveFileDialog.ShowDialog() == DialogResult.OK) { File.WriteAllText(saveFileDialog.FileName, Decrypt(key1, key2, textBox1.Text)); } } else label4.Visible = true; }

Соседние файлы в предмете Информационная безопасность