DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

ДОСЛІДЖЕННЯ ШИФРІВ ПІДСТАНОВКИ

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

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

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

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

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

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

31.05.2014 13:59

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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