Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки
Національний університет „Львівська політехніка”
Кафедра EОМ
Звіт
з лабораторної роботи № 2
з дисципліни: “ Захист інформації в комп’ютерних системах ”
Перестановочний шифр
Варіант 16
2018
Тема: Перестановочний шифр
Мета: Ознайомитись з основами класичної техніки шифрування – перестановочними шифрами.
Завдання:
Створити програму, що реалізує довільний перестановочний шифр.
Підготувати і захистити звіт, в якому обов’язково навести алгоритм роботи даного перестановочного шифру.
Хід роботи:
Код реалізації алгоритму
package sample;
public class RotationAlgorithm {
public static String encrypt(String source, String key){
if(key.length() < 2) return source;
else {
StringBuffer[] matrix = new StringBuffer[key.length()];
for(int i = 0; i < matrix.length; i++) matrix[i] = new StringBuffer();
int j = 0;
for(int i = 0; i < source.length(); i++) {
matrix[(Character.getNumericValue(key.charAt(j))) - 1].append(source.charAt(i));
if(++j == key.length()) j = 0;
}
StringBuilder target = new StringBuilder();
for (int i = 0; i < key.length(); i++){
target.append(matrix[i].toString());
}
return target.toString() ;
}
}
public static String decrypt(String source, String key){
if(key.length() < 2) return source;
else {
StringBuffer[] matrix = new StringBuffer[key.length()];
for(int i = 0; i < matrix.length; i++) matrix[i] = new StringBuffer();
int j = 0;
for(int i = 0; i < key.length(); i++) {
if(source.length() % key.length() != 0 && key.indexOf(Integer.toString(i + 1)) + 1 <= source.length() % key.length())
matrix[i].append(source.substring(j, j + source.length() / key.length() + 1));
else matrix[i].append(source.substring(j, j + source.length() / key.length()));
if(source.length() % key.length() != 0 && key.indexOf(Integer.toString(i + 1)) + 1 <= source.length() % key.length())
j += source.length() / key.length() + 1;
else j += source.length() / key.length();
}
StringBuilder target = new StringBuilder();
int k = 0;
for (j = 0; j < source.length() / key.length() + 1; ++j) {
for (int i = 0; i < key.length(); i++) {
target.append(matrix[Character.getNumericValue(key.charAt(i)) - 1].toString().charAt(j));
if (++k >= source.length()) break;
}
if (k >= source.length()) break;
}
return target.toString();
}
}
}
/
Рис. 1. Процес кодування тексту
/
Рис. 2. Текст після декодування
Висновок
На даній лабораторній роботі я ознайомився з основами класичної техніки шифрування – перестановочними шифрами, також я розробив програмну реалізацію перестановочного шифру що використовує перестановки стовпців.