Главная страница

Классические шифры подстановки. Лабораторная работа 1. Классические шифры подстановки


Скачать 0.56 Mb.
НазваниеЛабораторная работа 1. Классические шифры подстановки
АнкорКлассические шифры подстановки
Дата17.04.2022
Размер0.56 Mb.
Формат файлаdocx
Имя файлаКлассические шифры подстановки.docx
ТипЛабораторная работа
#481278

Лабораторная работа №1. Классические шифры подстановки

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

Ход работы:

  1. Изначально в среде программирования Visual Studia 2017 с использованием инструмента winForms был разработан дизайн приложения(рис. 1)



Рис. 1 – Дизайн приложения “Шифр”

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

Класс шифра Цезаря:

public class CaesarCipher

{

//символы русской азбуки

const string alfabet = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
private string CodeEncode(string text, int k)

{

//добавляем в алфавит маленькие буквы

var fullAlfabet = alfabet + alfabet.ToLower();

var letterQty = fullAlfabet.Length;

var retVal = "";

for (int i = 0; i < text.Length; i++)

{

var c = text[i];

var index = fullAlfabet.IndexOf(c);

if (index < 0)

{

//если символ не найден, то добавляем его в неизменном виде

retVal += c.ToString();

}

else

{

var codeIndex = (letterQty + index + k) % letterQty;

retVal += fullAlfabet[codeIndex];

}

}
return retVal;

}
//шифрование текста

public string Encrypt(string plainMessage, int key)

=> CodeEncode(plainMessage, key);
//дешифрование текста

public string Decrypt(string encryptedMessage, int key)

=> CodeEncode(encryptedMessage, -key);

}

Класс шифра Виженера:

public class VigenereCipher

{

const string defaultAlphabet = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";

readonly string letters = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
/* public VigenereCipher(string alphabet = null)

{

letters = string.IsNullOrEmpty(alphabet) ? defaultAlphabet : alphabet;

}

*/

//генерация повторяющегося пароля

private string GetRepeatKey(string s, int n)

{

var p = s;

while (p.Length < n)

{

p += p;

}
return p.Substring(0, n);

}
private string Vigenere(string text, string password, bool encrypting = true)

{

var gamma = GetRepeatKey(password, text.Length);

var retValue = "";

var q = letters.Length;
for (int i = 0; i < text.Length; i++)

{

var letterIndex = letters.IndexOf(text[i]);

var codeIndex = letters.IndexOf(gamma[i]);

if (letterIndex < 0)

{

//если буква не найдена, добавляем её в исходном виде

retValue += text[i].ToString();

}

else

{

retValue += letters[(q + letterIndex + ((encrypting ? 1 : -1) * codeIndex)) % q].ToString();

}

}
return retValue;

}
//шифрование текста

public string Encrypt(string plainMessage, string password)

=> Vigenere(plainMessage, password);
//дешифрование текста

public string Decrypt(string encryptedMessage, string password)

=> Vigenere(encryptedMessage, password, false);}



Рис. 2 - Демонстрация работы Шифра Цезаря

Рис. 3 – Демонстрация работы Шифра Виженера
По снимкам экрана видно, что программа игнорирует знаки пунктуации и заглавные буквы в шифре Виженера. Это происходит от того, что они отсутствуют в алфавите в коде программы.
Вывод: были изучены шифры подстановки, разработана программа позволяющая проводить шифрование и дешифрование текста. Для повышения эффективности программы можно добавить в алфавит дополнительные символы, включить в него латинские буквы. Для упрощения работы с программой можно добавить возможность чтения и записи текста из файла и обработку исключений.


написать администратору сайта