Частина тексту файла (без зображень, графіків і формул):
Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Теплоенергетичний факультет
Кафедра цифрових технологій в енергетиці
ЛАБОРАТОРНА РОБОТА №1
з дисципліни «Безпека інформаційних систем»
на тему: “Класичний шифр простої заміни та його криптоаналіз”
Варіант № 13
Мета лабораторної роботи – ознайомлення та набути умінь із зашифровування та дешифрування повідомлень за допомогою шифру простої заміни, за допомогою шифру Цезаря.
Теоретичні відомості
ШИФР ЦЕЗАРЯ
Розглянемо один з найдавніших та найбільш поширених шифрів простої (моноалфавітної) заміни – шифр Цезаря, названий на честь римського імператора Гая Юлія Цезаря. У цьому шифрі кожна літера повідомлення зсувається в алфавіті на K – позицій вперед від символу, що замінюється. При досягненні кінця алфавіту виконується циклічний перехід до його початку. При необхідності розділові знаки та пробіли ігноруються. Таким чином, наприклад, літерам алфавіту відповідатимуть числові позиції (табл. 1.1, табл. 1.2):
Таблиця. 1.1. Нумерація позицій літер англійського алфавіту
/
Таблиця. 1.2. Нумерація позицій літер українського алфавіту
/
Ключем шифрування є деяке фіксоване секретне число K – від 1 до 25 для англійського (латинського) алфавіту та K – від 1 до 32 для українського. При дешифруванні літера зашифрованого тексту замінюється на літеру розташовану в алфавіті на K позицій назад.
ЧАСТОТНИЙ КРИПТОАНАЛІЗ
Криптоаналіз шифру Цезаря ґрунтується на частотному аналізі появи окремих символів природньої мови у тексті. Частота символу у повідомленні дорівнює кількості його появи у тексті, поділеній на загальну кількість літер тексту. Для кожної мови справедливо наступне: у досить довгих текстах кожна літера зустрічається із приблизно однаковою частотою, залежно від самої літери і незалежно від конкретного тексту. Тобто імовірність появи окремих літер, а також їх порядок у словах і фразах природньої мови підпорядковуються статистичним закономірностям. Так, наприклад, відомо, що в українській та англійській мовах частоти появи літер розподілені наступним чином (табл. 1.3).
Таблиця. 1.3. Частоти появи літер в українській та англійській мовах
/
Отже, літера з найбільшою частотою в шифротексті буде замінюватися на літеру з найбільшою частотою у мові. А кількість позицій між ними буде визначати довжину ключа. Однак, якщо текст не дуже великий, то закономірності будь-якої природної мови можуть проявлятися в ньому не обов’язково в строгій відповідності з таблицею частот. В такому випадку розглядається відношення наступної літери за частотою появи у зашифрованому тексті та найчастішою літерою мови.
Завдання та хід роботи:
Завдання 1:
Створити програму на будь-якій мові програмування для шифрування повідомлень із використанням шифру Цезаря (англійській алфавіт). Значення ключа шифрування визначається номером за алфавітним списком студента у журналі. Зашифрувати своє прізвище та дешифрувати отриманий шифротекст.
Результат виконання програми:
/
Завдання 2:
За допомогою програми CrypTool Online з використанням шаблону Caesar виконати шифрування тексту шифром Цезаря згідно варіанту. Спочатку введіть відкритий текст до поля Input, потім визначте алфавіт за допомогою опції Define own alphabet, ключ шифрування оберіть самостійно
/
Шифрування:
/
Завдання 3:
Підрахувати частоти зустрічальності літер у шифротексті, використовуючи шаблон N-Gram Analysis в розділі криптоаналізу.
/
Отже, візьмемо індекс букви Ю – вона зустрічається найчастіше у нашому тексті, та віднімемо індекс букви О – вона напоширеніша у вжитку української мови – це і буде наш ключ шифрування.
Key = 31 – 18 = 13.
Висновок: Під час виконання даної лабораторної роботи було набуто умінь із заширування та дешифрування повідомлень за допомогою шифру Цезаря, та написано програмний код на мові програмування Java який виконує шифрування та дешифрування за певним введеним ключем.
Код програми:
Посилання на Replit: https://replit.com/join/tmapxqsqip-tr-15fundamient
import java.util.Scanner;
class Main {
public static String encrypt(String text, int key) {
StringBuilder ciphertext = new StringBuilder();
for (char c : text.toCharArray()) {
int shifted = (int) c + key;
if (c >= 'A' && c <= 'Z') {
if (shifted > 'Z') shifted -= 26;
if (shifted < 'A') shifted += 26;
} else if (c >= 'a' && c <= 'z') {
if (shifted > 'z') shifted -= 26;
if (shifted < 'a') shifted += 26;
}
ciphertext.append((char) shifted);
}
return ciphertext.toString();
}
public static String decrypt(String text, int key) {
return encrypt(text, -key);
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Input text: ");
String text = scan.nextLine();
System.out.println("Input key: ");
int key = scan.nextInt();
String encryptedText = encrypt(text, key);
String decryptedText = decrypt(encryptedText, key);
System.out.println("Encrypted text: " + encryptedText);
System.out.println("Decrypted text: " + decryptedText);
}
}
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!