|
|||
МОСКОВСКИЙ ПРИБОРОСТРОИТЕЛЬНЫЙ ТЕХНИКУМ
Министерство науки и высшего образования Российской Федерации федеральное государственное бюджетное образовательное учреждение высшего образования "Российский экономический университет имени Г.В. Плеханова" МОСКОВСКИЙ ПРИБОРОСТРОИТЕЛЬНЫЙ ТЕХНИКУМ
ЛАБОРАТОРНАЯ РАБОТА. AES. Учебной дисциплины: Криптографические средства и методы защиты информации
Специальность: 10.02.03 Информационная безопасность автоматизированных систем
Группа: БИ-1-17 Выполнили: Таскаев М.В. Проверил: Канакин А.В. Дата «___» ________2020 г. Оценка ______________
Москва Введение В данной лабораторной работе будет написана программа, шифрующая и дешифрующая текст методом AES. Цель работы Целью данной работы является практика программирования на языке C#, а также работа с шифром AES. Выполнение работы Начнем с создания формы, на ней будут расположены три текстбокса: для ввода текста, для вывода зашифрованного текста, для вывода дешифрованного текста; и две кнопки: зашифровать и дешифровать (Рисунок 1, “Вид”). Рисунок 1, "Вид" В теле класса формы объявим объект для создания ключа. AesManaged aeskey = new AesManaged(); А в конструкторе создадим ключ. Это необходимо для того, чтобы методы шифрования и дешифрования использовали один и тот же ключ (Рисунок 2, “Создание ключа”). aeskey.GenerateKey(); Рисунок 2, "Создание ключа" Теперь рассмотрим метод шифрования. byte[] encrypt() { Aes aes = Aes.Create(); aes.GenerateIV();
aes.Key = aeskey.Key;
byte[] encrypted; ICryptoTransform crypt = aes.CreateEncryptor(aes.Key, aes.IV); using (MemoryStream ms = new MemoryStream()) { using (CryptoStream cs = new CryptoStream(ms, crypt, CryptoStreamMode.Write)) { using (StreamWriter sw = new StreamWriter(cs)) { sw.Write(input_text.Text); } }
encrypted = ms.ToArray(); return encrypted.Concat(aes.IV).ToArray();
} } Он возвращает байтовый массив зашифрованных данных, после чего в событии при нажатии на кнопку мы конвертируем его в строку и выводим в текст бокс. private void button1_Click(object sender, EventArgs e) { byte[] encrypted; encrypted = encrypt(); cipher_text.Text = Convert.ToBase64String(encrypted); } Рассмотрим дешифрование. Сначала конвертируется строка в байтовый массив, затем выполняется дешифрование и выводится текст бокс. private void button2_Click(object sender, EventArgs e) { try { byte[] bytes = Convert.FromBase64String(input_text.Text);
byte[] bytesIv = new byte[16]; byte[] mess = new byte[bytes.Length - 16];
for (int i = bytes.Length - 16, j = 0; i < bytes.Length; i++, j++) { bytesIv[j] = bytes[i]; } for (int i = 0; i < bytes.Length - 16; i++) { mess[i] = bytes[i]; } Aes aes = Aes.Create();
aes.Key = aeskey.Key;
aes.IV = bytesIv;
string text = ""; byte[] data = mess; ICryptoTransform crypt = aes.CreateDecryptor(aes.Key, aes.IV); using (MemoryStream ms = new MemoryStream(data)) { using (CryptoStream cs = new CryptoStream(ms, crypt, CryptoStreamMode.Read)) { using (StreamReader sr = new StreamReader(cs)) {
text = sr.ReadToEnd(); } } } decipher_text.Text = text; } catch {
} } Приведем пример работы шифрования (Рисунок 3, “Шифрование”). Рисунок 3, "Шифрование" Теперь расшифруем полученный шифр (Рисунок 4, "Дешифрование"). Рисунок 4, "Дешифрование" Функции успешно работают. Вывод. В ходе выполнения задания были получены навыки работы с алгоритмом AES.
|
|||
|