Міністерство освіти і науки
Національний університет „Львівська політехніка”
Кафедра 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. Частота зустрічі літер в кодованому тексті
Висновок
На даній лабораторній роботі я ознайомився з основними методами, що використовуються для криптоаналізу шифрів моноалфавітної заміни та, зокрема, з основами частотного аналізу зашифрованого тексту.