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

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

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

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

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

Рік:
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:51

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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