Классические шифры подстановки
Автор: Solopsist • Апрель 17, 2022 • Лабораторная работа • 1,682 Слов (7 Страниц) • 254 Просмотры
Лабораторная работа №1. Классические шифры подстановки
Цель работы: изучение классических криптографических алгоритмов моноалфавитной и многоалфавитной подстановки; криптоанализ классических шифров на основе гистограмм частот встречаемости символов алфавита; приобретение навыков шифрования информации с использованием простейших методов шифрования.
Ход работы:
- Изначально в среде программирования Visual Studia 2017 с использованием инструмента winForms был разработан дизайн приложения(рис. 1)
[pic 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 = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
...