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

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

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

Рік:
2009
Тип роботи:
Звіт
Предмет:
Методи та засоби криптографічних перетворень
Група:
ІБ – 44

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”  ЗВІТ ДО ЛАБОРАТОРНОЇ РОБОТИ № 2 З КУРСУ “ Методи та засоби криптологічних перетворень” АФІННІ ШИФРИ Мета роботи: Написати программу для шифрування методом зсуву к – го порядку забезпечення введеня стрічки і ключа з клавіатури і виведення шифрованої і дешифрованої стрічки на екран Функції і класи Encrypt(string strToEncrypt, string key)– шифрує стррчку strToEncrypt, ключем key Decrypt(string strToDecrypt, string key) – дешифрує стррчку strToDecrypt, ключем key parseStringToBlocks(string lStringToParse, int lSize) – розбиває стрічку lStringToParse на блоки розміру lSize formValidate – здійснює валідацію форми – повертає true – якшо пройдена, інакше – false AlphabetManager – абстрактний клас, менеджер який оперує алфавітами – повертає довжину алфавіту, числове представлення за символом і символ за числовим представленням EnglishAlphabetManager – конкретна реалізація AlphabetManager, представляє латиницю Alpha – класс який представляє символ, складається з символа і його числового відображення RandomNumberGenerator – системний клас, що повертає випадковим чином згенеровану послідовність байтів. Текст программи using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Security.Cryptography; namespace WindowsFormsApplication1 { public partial class Form1 : Form { #region Fields AlphabetManager alManager = new EnglishAlphabetManager(); #endregion #region Events public Form1() { InitializeComponent(); } private void btnEncrypt_Click(object sender, EventArgs e) { if (this.formValidate()) { string result = Encrypt(this.tbxTextToCrypt.Text, this.tbxKey.Text); this.tbxResultText.Text = result; } } private void btnDecrypt_Click(object sender, EventArgs e) { if (this.formValidate()) { string result = Decrypt(this.tbxTextToCrypt.Text, this.tbxKey.Text); this.tbxResultText.Text = result; } } private void btnClear_Click(object sender, EventArgs e) { tbxKey.Text = String.Empty; tbxTextToCrypt.Text = String.Empty; tbxResultText.Text = String.Empty; } private void Form1_Load(object sender, EventArgs e) { } #endregion #region Public Methods private string Encrypt(string strToEncrypt, string key) { StringBuilder result = new StringBuilder(); AlphabetManager alManager = new EnglishAlphabetManager(); strToEncrypt = strToEncrypt.ToLower(); List<string> strBlocks = parseStringToBlocks(strToEncrypt, key.Length); foreach (string block in strBlocks) { for (int i = 0; i < key.Length; i++) { int cryptNum = alManager.GetNumberByChar(block[i]) + alManager.GetNumberByChar(key[i]); char encryptedChar = alManager.GetSymbolByNumber(cryptNum); result.Append(encryptedChar); } } return result.ToString(); } private string Decrypt(string strToDecrypt, string key) { StringBuilder result = new StringBuilder(); AlphabetManager alManager = new EnglishAlphabetManager(); strToDecrypt = strToDecrypt.ToLower(); List<string> strBlocks = parseStringToBlocks(strToDecrypt, key.Length); foreach (string block in strBlocks) { for (int i = 0; i < key.Length; i++) { int cryptNum = alManager.GetNumberByChar(block[i]) - alManager.GetNumberByChar(key[i]); char decryptedChar = alManager.GetSymbolByNumber(cryptNum); result.Append(decryptedChar); } } return result.ToString(); } #endregion #region Private Methods private List<string> parseStringToBlocks(string lStringToParse, int lSize) { List<string> result = null; if (lStringToParse.Length > 0) { int elemetnNotInBlock = lStringToParse.Length % lSize; if (elemetnNotInBlock > 0) { int elementToAdd = lSize - elemetnNotInBlock; // Convert the binary input into Base64 UUEncoded output. // Each 3 byte sequence in the source data becomes a 4 byte // sequence in the character array. int bytesLength = (int)(Math.Ceiling( (double)elementToAdd / 3 * 4)); byte[] randomBytes = new byte[bytesLength]; RandomNumberGenerator rndGen = RandomNumberGenerator.Create(); rndGen.GetBytes(randomBytes); // Convert.ToBase64CharArray(randomBytes, 0, elementToAdd + 1, randCharArray, 0); string strWithRandValues = Convert.ToBase64String(randomBytes); char[] randCharArray = strWithRandValues.ToCharArray(0, elementToAdd); StringBuilder randStringToAdd = new StringBuilder(); foreach (char ch in randCharArray) { randStringToAdd.Append(alManager.GetSymbolByNumber((int)ch)); } lStringToParse = lStringToParse + randStringToAdd.ToString(); } int blockLenght = lStringToParse.Length / lSize; result = new List<string>(blockLenght); for (int blCount = 0; blCount < blockLenght; blCount++) { result.Add(lStringToParse.Substring(blCount * lSize, lSize)); } } return result; } private bool formValidate() { bool isValid = true; if (this.tbxKey.Text == String.Empty) { validationProvider.SetError(tbxKey, "You must enter Key"); isValid = false; } if (this.tbxTextToCrypt.Text == String.Empty) { validationProvider.SetError(tbxTextToCrypt, "You must enter text to Encrypt"); isValid = false; } if (isValid) { validationProvider.Clear(); } return isValid; } #endregion } #region Dll Classes public abstract class AlphabetManager { public abstract int LENGHT { get; } public List<Alpha> AlphabetList { get; set; } public AlphabetManager() { AlphabetList = new List<Alpha>(LENGHT); initializeAlphabet(); } public char GetSymbolByNumber(int num) { char result = AlphabetList[0].Symbol; if (num > LENGHT) { num = num % LENGHT; } else if (num < 0) { num = (num % LENGHT) + LENGHT; } foreach (Alpha alpha in AlphabetList) { if (alpha.Number == num) { result = alpha.Symbol; break; } } return result; } public int GetNumberByChar(char symbol) { int result = 0; foreach (Alpha alpha in AlphabetList) { if (alpha.Symbol.Equals(symbol)) { result = alpha.Number; break; } } return result; } protected abstract void initializeAlphabet(); } public class EnglishAlphabetManager : AlphabetManager { public const int EnglAlphabetLenght = 26; public override int LENGHT { get { return EnglAlphabetLenght; } } protected override void initializeAlphabet() { AlphabetList.Add(new Alpha('a', 0)); AlphabetList.Add(new Alpha('b', 1)); AlphabetList.Add(new Alpha('c', 2)); AlphabetList.Add(new Alpha('d', 3)); AlphabetList.Add(new Alpha('e', 4)); AlphabetList.Add(new Alpha('f', 5)); AlphabetList.Add(new Alpha('g', 6)); AlphabetList.Add(new Alpha('h', 7)); AlphabetList.Add(new Alpha('i', 8)); AlphabetList.Add(new Alpha('j', 9)); AlphabetList.Add(new Alpha('k', 10)); AlphabetList.Add(new Alpha('l', 11)); AlphabetList.Add(new Alpha('m', 12)); AlphabetList.Add(new Alpha('n', 13)); AlphabetList.Add(new Alpha('o', 14)); AlphabetList.Add(new Alpha('p', 15)); AlphabetList.Add(new Alpha('q', 16)); AlphabetList.Add(new Alpha('r', 17)); AlphabetList.Add(new Alpha('s', 18)); AlphabetList.Add(new Alpha('t', 19)); AlphabetList.Add(new Alpha('u', 20)); AlphabetList.Add(new Alpha('v', 21)); AlphabetList.Add(new Alpha('w', 22)); AlphabetList.Add(new Alpha('x', 23)); AlphabetList.Add(new Alpha('y', 24)); AlphabetList.Add(new Alpha('z', 25)); } } public class Alpha { public char Symbol { get; set; } public int Number { get; set; } public Alpha(char symbol, int number) { this.Symbol = symbol; this.Number = number; } } #endregion } Результат роботи программи:   Висновок : в процессі роботи була створена программа яка шифрує стрічку методом зсуву к – го порядку, программа була реалізована за допомогою технологиї Microsoft .NET Framework, з використанням системних мождивостец для генерацію випадкових чисел. Загалом не вважаю даний метод шифрування хоч трішечки надійним за умов сучасного розвитку обчислювальної техніки
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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