Шифрування даних за допомогою AES

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
О
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2018
Тип роботи:
Лабораторна робота
Предмет:
Захист інформації в комп’ютерних системах

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет “Львівська політехніка” Кафедра ЕОМ / Лабораторна робота №8 з дисципліни «Захист інформації в комп’ютерних системах» на тему: «Шифрування даних за допомогою AES» Мета роботи: Мета роботи – ознайомитись з одним із сучасних симетричних алгоритмів блочного шифрування AES, навчитися його застосовувати для різних типів даних. Завдання: 1. Розробити графічний інтерфейс на мові C# для коду алгоритму реалізації шифрування файлів за допомогою AES (наведений у додатку). 2. Налаштувати алгоритм згідно свого варіанту відповідно до таблиці варіантів. Теоретичні відомості Advanced Encryption Standard (AES) – симетричний алгоритм блочного шифрування (розмір блока 128 біт, ключ 128/192/256 біт), фіналіст конкурсу AES і прийнятий в якості американського стандарту шифрування урядом США. Станом на 2009 рік AES був одним із найпоширеніших алгоритмів симетричного шифрування. AES являє собою симетричний алгоритм шифрування з ключем. Ключ може мати довжину 128, 192 і 256 біт. Алгоритми з ключем довжиною 128, 192 і 256 біт позначаються відповідно як AES-128, AES-192, AES-256. AES-128, AES-192, AES-256 обробляють блоки даних за відповідно 10, 12 та 14 ітерацій. Кожна ітерація (раунд) являє собою визначену послідовність трансформацій. Всі ітерації однакові за виключенням останньої, з якої виключене одне з перетворень. Кожен раунд працює з двома 128-бітними блоками: “поточний” та “ключ раунду”. Всі раунди використовують різні “ключі раунду”, які отримуються за допомогою алгоритму розширення ключа. Цей алгоритм не залежить від даних, які ми шифруємо, і може виконуватися незалежно від фази шифрування/дешифрування. Хід виконання: Варіант №4 Код реалізації алгоритму роботи шифру: using System; using System.Security.Cryptography; using System.IO; namespace AES_Encryption { public class AES { public AES() { } // Encrypt a byte array into a byte array using a key and an IV private byte[] Encrypt(byte[] clearData, byte[] Key, byte[] IV) { // Create a MemoryStream that is going to accept the encrypted bytes MemoryStream ms = new MemoryStream(); Rijndael alg = Rijndael.Create(); alg.Key = Key; alg.IV = IV; CryptoStream cs = new CryptoStream(ms, alg.CreateEncryptor(), CryptoStreamMode.Write); cs.Write(clearData, 0, clearData.Length); cs.Close(); byte[] encryptedData = ms.ToArray(); return encryptedData; } /// <summary> /// Returns an encrypted string using Rijndael (128,192,256 Bits). /// </summary> public string Encrypt(string Data, string Password,int Bits) { byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(Data); PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] {0x00, 0x01, 0x02, 0x1C,0x1D,0x1E,0x03,0x04,0x05,0x0F,0x20,0x21,0xAD,0xAF,0xA4}); if (Bits == 128) { byte[] encryptedData = Encrypt(clearBytes, pdb.GetBytes(16), pdb.GetBytes(16)); return Convert.ToBase64String(encryptedData); } else if(Bits == 192) { byte[] encryptedData = Encrypt(clearBytes, pdb.GetBytes(24), pdb.GetBytes(16)); return Convert.ToBase64String(encryptedData); } else if(Bits == 256) { byte[] encryptedData = Encrypt(clearBytes, pdb.GetBytes(32), pdb.GetBytes(16)); return Convert.ToBase64String(encryptedData); } else { return string.Concat(Bits); } } // Decrypt a byte array into a byte array using a key and an IV private byte[] Decrypt(byte[] cipherData, byte[] Key, byte[] IV) { MemoryStream ms = new MemoryStream(); Rijndael alg = Rijndael.Create(); alg.Key = Key; alg.IV = IV; CryptoStream cs = new CryptoStream(ms, alg.CreateDecryptor(), CryptoStreamMode.Write); cs.Write(cipherData, 0, cipherData.Length); cs.Close(); byte[] decryptedData = ms.ToArray(); return decryptedData; } public string Decrypt(string Data, string Password,int Bits) { byte[] cipherBytes = Convert.FromBase64String(Data); PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] {0x00, 0x01, 0x02, 0x1C,0x1D,0x1E,0x03,0x04,0x05,0x0F,0x20,0x21,0xAD,0xAF,0xA4}); if (Bits == 128) { byte[] decryptedData = Decrypt(cipherBytes, pdb.GetBytes(16), pdb.GetBytes(16)); return System.Text.Encoding.Unicode.GetString(decryptedData); } else if(Bits == 192) { byte[] decryptedData = Decrypt(cipherBytes, pdb.GetBytes(24), pdb.GetBytes(16)); return System.Text.Encoding.Unicode.GetString(decryptedData); } else if(Bits == 256) { byte[] decryptedData = Decrypt(cipherBytes, pdb.GetBytes(32), pdb.GetBytes(16)); return System.Text.Encoding.Unicode.GetString(decryptedData); } else { return string.Concat(Bits); } } } } Результат виконання: відкритий текст: / шифрований текст: / Висновок: на лабораторній роботі я ознайомився із шифром AES.
Антиботан аватар за замовчуванням

29.05.2018 23:24

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!