Криптоаналіз

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

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

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

Рік:
2018
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Захист інформації в комп’ютерних системах

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

Міністерство освіти і науки Національний університет „Львівська політехніка” Кафедра EОМ Звіт з лабораторної роботи № 3 з дисципліни: “ Захист інформації в комп’ютерних системах ” Криптоаналіз шифрів моноалфавітної заміни 2018 Тема: Криптоаналіз шифрів моноалфавітної заміни Мета: Ознайомитись з основними методами, що використовуються для криптоаналізу шифрів моноалфавітної заміни та , зокрема, з основами частотного аналізу зашифрованого тексту. Завдання: Отримати у викладача згідно з варіантом приклад текстового файлу, зашифрованого шифром Цезаря. Створити програму, що реалізує метод крипто аналізу на основі частотного аналізу шифрованого тексту. Хід роботи: Код реалізації алгоритму package sample; import com.sun.org.apache.xml.internal.security.algorithms.JCEMapper; import javafx.scene.control.Alert; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; public class Translator { public static String getOriginalText(String text){ text = text.toUpperCase(); Map<Character, Double> allAbbetproc = new HashMap<>(); allAbbetproc.put('А',0.064); allAbbetproc.put('Б',0.013); allAbbetproc.put('В',0.045); allAbbetproc.put('Г',0.013); allAbbetproc.put('Д',0.027); allAbbetproc.put('Е',0.042); allAbbetproc.put('Є',0.005); allAbbetproc.put('Ж',0.007); allAbbetproc.put('З',0.020); allAbbetproc.put('И',0.055); allAbbetproc.put('І',0.044); allAbbetproc.put('Ї',0.011); allAbbetproc.put('Й',0.010); allAbbetproc.put('К',0.039); allAbbetproc.put('Л',0.032); allAbbetproc.put('М',0.034); allAbbetproc.put('Н',0.068); allAbbetproc.put('О',0.100); allAbbetproc.put('П',0.025); allAbbetproc.put('Р',0.025); allAbbetproc.put('С',0.037); allAbbetproc.put('Т',0.052); allAbbetproc.put('У',0.027); allAbbetproc.put('Ф',0.004); allAbbetproc.put('Х',0.013); allAbbetproc.put('Ц',0.012); allAbbetproc.put('Ч',0.012); allAbbetproc.put('Ш',0.006); allAbbetproc.put('Щ',0.004); allAbbetproc.put('Ь',0.018); allAbbetproc.put('Ю',0.009); allAbbetproc.put('Я',0.021); text = text.toUpperCase(); Map<Character, Double> Counter = new HashMap<>(); int lenght = 0; for (int i = 0; i < text.length(); i++) { if(Character.isAlphabetic(text.charAt(i))) { Counter.putIfAbsent(text.charAt(i), 0.0); Counter.put(text.charAt(i), Counter.get(text.charAt(i)) + 1); lenght++; } } for (Map.Entry<Character, Double> entry : Counter.entrySet()) { Counter.put(entry.getKey(), entry.getValue() / (double) lenght); } StringBuilder result = new StringBuilder(); for (Map.Entry<Character, Double> entry : Counter.entrySet()) { result.append(entry.getKey() + " " + entry.getValue() + '\n'); } Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setTitle("Stat"); alert.setHeaderText(null); alert.setContentText(result.toString()); alert.show(); StringBuilder sapmle = new StringBuilder(); String etalon = "оанвиіетклрсудмпбгзяєжїйхцчшщьюф"; Map<Character, Character> resultTable = new HashMap<>(); Counter.entrySet().stream() .sorted(Map.Entry.<Character, Double>comparingByValue().reversed()) .forEach(e -> sapmle.append(e.getKey())); System.out.println(sapmle); for (int i = 0; i != etalon.length(); i++) { resultTable.put(sapmle.charAt(i), etalon.charAt(i)); //text = text.replace(entry.getKey(), tryentry.getKey()); } result = new StringBuilder(); for (Map.Entry<Character, Character> entry : resultTable.entrySet()) { result.append(entry.getKey() + " " + entry.getValue() + '\n'); } Alert alert1 = new Alert(Alert.AlertType.INFORMATION); alert1.setTitle("Result table"); alert1.setHeaderText(null); alert1.setContentText(result.toString()); alert1.show(); result = new StringBuilder(); for (int i = 0; i < text.length(); i++) { if(resultTable.get(text.charAt(i)) != null) result.append(resultTable.get(text.charAt(i)).toString()); else result.append(text.charAt(i)); } return result.toString ().toLowerCase(); / Рис. 1. Процес кодування тексту / Рис. 2. Частота зустрічі літер в кодованому тексті Висновок На даній лабораторній роботі я ознайомився з основними методами, що використовуються для криптоаналізу шифрів моноалфавітної заміни та, зокрема, з основами частотного аналізу зашифрованого тексту.
Антиботан аватар за замовчуванням

24.11.2018 18:11-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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