DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Звіт до лабораторної роботи № 2 з курсу “Методи та засоби криптологічних перетворень”

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

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

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

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

Про що ця робота

У звіті наведено програмну реалізацію афінних шифрів та шифрування методом зсуву к-го порядку мовою C#. Описано основні класи та алгоритми роботи з алфавітом і генерацією випадкових величин.

У роботі розглядаються

  • Криптографічні перетворення
  • Афінні шифри
  • Метод зсуву
  • Програмне забезпечення
  • Мова програмування C#
  • Захист інформації

Зміст і розділи

  1. Мета роботи
  2. Функції і класи
  3. Текст програми
  4. Результат роботи програми
  5. Висновок
Для кого:Студенти технічних спеціальностей, викладачі та дослідники у галузі інформаційної безпеки та криптографії.
Викладачі:Не вказано

Ключові поняття

шифруваннядешифруванняалфавіткласметод зсувуC#.NET Frameworkгенератор випадкових чиселблок

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”  ЗВІТ ДО ЛАБОРАТОРНОЇ РОБОТИ № 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, з використанням системних мождивостец для генерацію випадкових чисел. Загалом не вважаю даний метод шифрування хоч трішечки надійним за умов сучасного розвитку обчислювальної техніки
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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