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

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

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

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

Дослідження шифрів підстановки

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

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

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

Рік:
2014
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Криптографічні системи та протоколи
Група:
КН-31
Коротко про документ

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

Звіт до лабораторної роботи присвячено дослідженню шифрів підстановки та розробці програм для реалізації алгоритмів на комп'ютері. Наведено код та результати для шифру Плейфера та шифру Віженера.

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

  • Криптографія
  • Шифри підстановки
  • Шифр Плейфера
  • Шифр Віженера
  • Програмна реалізація
  • Захист інформації

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

  1. Завдання
  2. Блок-схеми алгоритму програми
  3. Текст програми
  4. Результати роботи програм
Для кого:Студенти технічних спеціальностей вищих навчальних закладів
Викладачі:Викладач кафедри

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

шифр підстановкишифр Плейферашифр Віженераалгоритм шифруваннярозшифруванняключпрограмне забезпеченняблок-схема

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» ІКТА кафедра БІТ З В І Т до лабораторної роботи №1 з курсу: «КРИПТОГРАФІЧНІ СИСТЕМИ ТА ПРОТОКОЛИ» на тему: «ДОСЛІДЖЕННЯ ШИФРІВ ПІДСТАНОВКИ» Мета роботи - вивчити основні характеристики шифрів підстановки і навчитися розробляти програмне забезпечення для реалізації алгоритмів шифрування з використанням шифрів підстановки на комп’ютері. 1. Завдання 1.1. Домашня підготовка до роботи 1) Вивчити основні алгоритми шифрування, що використовують моноалфавітні та поліалфавітні підстановки. 2) Скласти блок-схеми алгоритмів та програму для реалізації шифру Плейфера. 3) Скласти блок-схеми алгоритмів та програму для реалізації зашифрування та розшифрування відкритого тексту величиною приблизно два аркуші формату А4 за допомогою шифру з автоключем і багатоконтурної системи Віженера з періодом n=5. Забезпечити введення ключа шифрування з клавіатури. 1.2. Робота в лабораторії 1) Ввести в комп'ютер програми згідно із завданням. 2) Відлагодити програми. При необхідності скоригувати блок-схеми алгоритмів та програми у відповідності з виявленими логічними та синтаксичними помилками. 3) Остаточні версії блок-схем, програм та отримані результати оформити у звіті з лабораторної роботи. 4) Здати звіт з лабораторної роботи. 2. Блок-схеми алгоритму програми 2.1. Шифр Плейфера Метод main Метод Clean_Key Метод Make_Resh Метод Print_Resh Метод encrypt Метод decrypt 2.1. Шифр Віженера Функція main Функція upper Функція enciper 3. Текст програми Шифр Плейфера using System; namespace ConsoleApplication1 { class Program { static string Al = "ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯabcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя !@\"#№$;%^:&?*()-_+={}[]\\/<>.,~`0123456789"; static string MyText = ""; static string Key = ""; static string R = ""; static string ResText = ""; static char[,] Resh = new char[10, 16]; static string str = ""; static int x = 0; static void Main(string[] args) { Console.WriteLine("Введите ключевое слово"); Key = Console.ReadLine(); Clean_Key(); Make_Resh(); Print_Resh(); Console.WriteLine("Введите текст для шифрования"); MyText = Console.ReadLine(); encrypt(); Console.WriteLine("\nзашифрованное\n{0}", ResText); decrypt(); Console.WriteLine("\nрасшифрованное\n{0}", MyText); Console.ReadKey(); } static void Clean_Key() { x = 0; do { if (Key[x] != (char)1) Key = Key.Substring(0, x + 1) + Key.Substring(x + 1, Key.Length - x - 1).Replace(Key[x], (char)1); x++; } while (x != Key.Length); str = ""; x = 0; do { if (Key[x] != (char)1) str += Key[x]; x++; } while (x != Key.Length); Key = str; } static void Make_Resh() { R = Key + Al; for (int i = 0; i < Key.Length; i++) R = R.Substring(0, i + 1) + R.Substring(i + 1, R.Length - i - 1).Replace(R[i], (char)1); str = ""; x = 0; do { if (R[x] != (char)1) str += R[x]; x++; } while (x != R.Length); R = str; int num = 0; for (int i = 0; i < 10; i++) for (int j = 0; j < 16; j++) { Resh[i, j] = R[num]; num++; } } static void Print_Resh() { Console.WriteLine("\nПолучившееся решетка"); for (int i = 0; i < 10; i++) { for (int j = 0; j < 16; j++) Console.Write("{0} ", Resh[i, j]); Console.WriteLine(); } Console.WriteLine(); } //****************************************************************************// //* Функція шифрування *// static void encrypt() { int i = 0; int j = 0; int[] pos1 = new int[2]; int[] pos2 = new int[2]; for (int k = 0; k < MyText.Length - 1; k = k + 2) if (MyText[k] == MyText[k + 1] /*&& MyText[k + 1] != 'й'*/) MyText = MyText.Insert(k + 1, "й"); //перевірка if (MyText.Length % 2 != 0) MyText += " "; Console.WriteLine("тест {0}", MyText); for (int k = 0; k < MyText.Length - 1; k = k + 2) { for (i = 0; i < 10; i++) { for (j = 0; j < 16; j++) { if (Resh[i, j] == MyText[k]) { pos1[0] = i; pos1[1] = j; } if (Resh[i, j] == MyText[k + 1]) { pos2[0] = i; pos2[1] = j; } } } if (pos1[0] == pos2[0]) { if (pos1[1] < pos2[1]) ResText = ResText + Resh[pos1[0], (pos1[1] + 1) % 16] + Resh[pos2[0], (pos2[1] + 1) % 16]; else if (pos1[1] > pos2[1]) ResText = ResText + Resh[pos2[0], (pos1[1] + 1) % 16] + Resh[pos2[0], (pos2[1] + 1) % 16]; } else if (pos1[1] == pos2[1]) { if (pos1[0] < pos2[0]) ResText = ResText + Resh[(pos1[0] + 1) % 10, pos2[1]] + Resh[(pos2[0] + 1) % 10, pos2[1]]; else if (pos1[0] > pos2[0]) ResText = ResText + Resh[(pos1[0] + 1) % 10, pos1[1]] + Resh[(pos2[0] + 1) % 10, pos1[1]]; } else { ResText = ResText + Resh[pos1[0], pos2[1]] + Resh[pos2[0], pos1[1]]; } } } //****************************************************************************// //* Функція розшифровки *// //****************************************************************************// static void decrypt() { MyText = ""; int i = 0; int j = 0; int[] pos1 = new int[2]; int[] pos2 = new int[2]; for (int k = 0; k < ResText.Length - 1; k += 2) { for (i = 0; i < 10; i++) { for (j = 0; j < 16; j++) { if (Resh[i, j] == ResText[k]) { pos1[0] = i; pos1[1] = j; } if (Resh[i, j] == ResText[k + 1]) { pos2[0] = i; pos2[1] = j; } } } if (pos1[0] == pos2[0]) { if (pos1[1] < pos2[1]) MyText = MyText + Resh[pos1[0], (pos1[1] + 15) % 16] + Resh[pos2[0], (pos2[1] + 15) % 16]; else if (pos1[1] > pos2[1]) MyText = MyText + Resh[pos2[0], (pos1[1] + 15) % 16] + Resh[pos2[0], (pos2[1] + 15) % 16]; } else if (pos1[1] == pos2[1]) { if (pos1[0] < pos2[0]) MyText = MyText + Resh[(pos1[0] + 9) % 10, pos2[1]] + Resh[(pos2[0] + 9) % 10, pos2[1]]; else if (pos1[0] > pos2[0]) MyText = MyText + Resh[(pos1[0] + 9) % 10, pos1[1]] + Resh[(pos2[0] + 9) % 10, pos1[1]]; } else MyText = MyText + Resh[pos1[0], pos2[1]] + Resh[pos2[0], pos1[1]]; } for (int k = 1; k < MyText.Length - 1; k++) if (MyText[k - 1] == MyText[k + 1] && MyText[k] == 'й') MyText = MyText.Remove(k, 1); if (MyText[MyText.Length - 1] == ' ') MyText = MyText.Substring(0, MyText.Length - 1); } } } Шифр Віженера #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <conio.h> void upper_case(char *src) { while (*src != '\0') { if (islower(*src)) *src &= ~0x20; src++; } } char* encipher(const char *src, char *key, int is_encode) { int i, klen, slen; char *dest; dest = strdup(src); upper_case(dest); upper_case(key); /* strip out non-letters */ for (i = 0, slen = 0; dest[slen] != '\0'; slen++) if (isupper(dest[slen])) dest[i++] = dest[slen]; dest[slen = i] = '\0'; klen = strlen(key); for (i = 0; i < slen; i++) { if (!isupper(dest[i])) continue; dest[i] = 'A' + (is_encode ? dest[i] - 'A' + key[i % klen] - 'A' : dest[i] - key[i % klen] + 26) % 26; } return dest; getch(); } int main() { const char *str = "politeh "; const char *cod, *dec; char key[] = "VIGENERECIPHER"; printf("Text: %s\n", str); printf("key: %s\n", key); cod = encipher(str, key, 1); printf("Code: %s\n", cod); dec = encipher(cod, key, 0); printf("Back: %s\n", dec); /* free(dec); free(cod); */ /* nah */ getch(); return 0; } 4. Результати роботи програм Шифр Плейфера Шифр Віженера
Допоможи студентському архіву

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

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

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

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

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

Admin

26.02.2023 12:38

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