Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Інститут комп’ютерних наук та інформаційних технологій
Кафедра АСУ
Звіт
Про виконання лабораторної роботи №1
з дисципліни
«Технології захисту інформації»
на тему:
«Дослідження шифрів заміни, перестановки, гамування»
Мета роботи: Дослідження алгоритму та методики практичної реалізації шифрів на заміни, перестановки та гамування.
Послідовність виконання роботи:
Кодування і декодування алгоритмом заміни.
Кодування і декодування методом перестановки
Кодування і декодування методом гамування.
Кодування і декодування алгоритмом Цезаря за допомогою програмного засобу.
Хід роботи:
Вхідна текстова послідовність для кодування і декодування всіма методами: «ось моя таємниця вона дуже проста лише серце добре бачить».
Кодування і декодування алгоритмом заміни.
Вихідним алфавітом є малі літери українського алфавіту та пробіл. Для побудови ключа скористаємось процедурою рандомізації, тобто перемішаємо вихідний алфавіт у випадковому порядку. Отримуємо такий ключ:
а
б
в
г
ґ
д
е
є
ж
з
и
і
ї
й
к
л
м
н
о
п
р
с
т
у
ф
х
ц
ч
ш
щ
ь
ю
я
б
л
з
а
п
у
х
с
я
н
к
е
ґ
і
и
ю
ц
ч
є
й
г
р
ї
в
м
ф
щ
ж
о
ш
т
д
ь
Кодована послідовність:
єр ьцєдьїбсцчкшдьзєчбьувяхьйгєрїбьюкохьрхгшхьуєлгхьлбжкї
Аналогічно для декодування формується таблицю розшифрування:
а
б
в
г
ґ
д
е
є
ж
з
и
і
ї
й
к
л
м
н
о
п
р
с
т
У
ф
х
ц
ч
ш
щ
ь
ю
я
г
а
у
р
ї
я
і
о
ч
в
к
й
т
п
и
б
ф
з
ш
ґ
с
є
ю
д
х
е
м
н
щ
ц
л
ж
ь
За допомогою цієї таблиці розшифровуємо кодований текст.
Декодована послідовність:
ось моя таємниця вона дуже проста лише серце добре бачить
Кодування і декодування методом перестановки
Створення ключа
Ключем для шифру перестановки буде слугувати гасло — слово «жебрак». На основі гасла створюємо таблицю, яка буде використовуватись для шифрування (шкала рознесення). Кількість стовпців у таблиці дорівнює кількості літер у гаслі. Пронумеруємо кожен стовпчик таблиці таким чином, щоб менший порядковий номер літери гасла у алфавіті отримав менше число.
Ж
Е
Б
Р
А
К
4
3
2
6
1
5
Шифрування
Дано наступний відкритий текст: «Не я належу минулому, а минуле належить мені».
Опускаємо неалфавітні символи тексту і вписуємо його до таблиці послідовно по-рядково:
Ж
Е
Б
Р
А
К
4
3
2
6
1
5
о
с
ь
ц
я
м
о
я
т
а
є
м
н
и
ц
я
в
о
н
а
д
у
ж
е
п
р
о
с
а
и
Виписуємо літери із стовпців таблиці: у порядку нумерації стовпців, зверху вниз. Отримуємо такий шифротекст (для зручності розбитий на групи по п'ять символів):
Яєвжа ьтцдо сяиар ооннп ммоеи цаяус
Дешифрування
Для розшифрування шифротексту треба виконати обернену послідовність дій: у порядку номерів стовпчиків вписати до таблиці зверху вниз шифротекст і потім виписати послідовно порядково вихідний текст повідомлення.
Кодування і декодування методом гамування.
Створення ключа:
Для шифрування методом гамування необхідно визначити алфавіт, на основі якого будуть створюватись повідомлення та ключ. Також кожному символу треба надати послідовний номер (код), який буде використовуватись при гамуванні.
а
б
в
г
ґ
д
е
є
ж
з
и
і
ї
й
к
л
м
н
о
п
р
с
т
у
ф
х
ц
ч
ш
щ
ь
ю
я
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
У якості основи гами (ключ) зручно обрати слово-гасло. Нехай це буде «інформація». Сама гама має довжину відкритого повідомлення і складається із повторення гасла.
Шифрування
Приводимо вхідний текст до канонічного вигляду, тобто викидаємо yci символи, що відсутні в означеному алфавіт. Отримуємо:
осьмоятаємницявонадужепроста
Складаємо таблицю із трьох рядків. Перший ряд О містить відкрите повідомлення, другий Г — гаму, третій S — шифрований текст.
За умовою завдання гамування необхідно здійснити за формулою S = Г - О(mod 26). В результаті виконання усього процесу гамування отримуємо таблицю:
O
о
с
ь
м
о
я
т
а
є
м
н
и
ц
я
в
о
н
а
д
у
ж
е
п
р
о
с
т
а
Г
і
н
ф
о
р
м
а
ц
і
я
і
н
ф
о
р
м
а
ц
і
я
і
н
ф
о
р
м
а
ц
S
ц
щ
ч
в
в
м
и
ц
ґ
м
ц
є
ю
о
о
л
ц
щ
ч
в
в
м
и
ц
ґ
є
ю
о
Зашифрованe повідомлення має такий вигляд:
цщчввмицґмцєюоолцщчввмицґмцєюо
Дешифрування
Дешифрування відбувається у зворотньому порядку за формулою O = Г - S(mod 26).
O
о
с
ь
м
о
я
т
а
є
м
н
и
ц
я
в
о
н
а
д
у
ж
е
п
р
о
с
т
а
Г
і
н
ф
о
р
м
а
ц
і
я
і
н
ф
о
р
м
а
ц
і
я
і
н
ф
о
р
м
а
ц
S
ц
щ
ч
в
в
м
и
ц
ґ
м
ц
є
ю
о
о
л
ц
щ
ч
в
в
м
и
ц
ґ
є
ю
о
Після розшифрування отримуємо:
осьмоятаємницявонадужепроста
Розшифроване повідомлення еквівалентне вихідному відкритому повідомленню. Це свідчить про правильність виконання процесів шифрування та дешифрування.
Кодування і декодування алгоритмом Цезаря за допомогою програмного засобу.
Закодуємо вхідний текст шифром Цезаря з кроком - 3, в результаті отримаємо:
сфа псв хгипрйщв дсрг жціз тусфхг ойюз фзущз жсґуз ґгьйха
Висновок. Під час виконання лабораторної роботи, я вивчив методи шифрування інформації і застосував ці знання на практиці. Програмно реалізував шифр Цезаря і протестував на заданій текстовій послідовності.
Додаток 1. Код програми
public class Main {
String _alphabeth = "АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ";
public Main() throws IOException {
Scanner sc = new Scanner(new File("input.txt"));
FileOutputStream fos = new FileOutputStream("output.txt");
while(sc.hasNextLine()) {
String s = sc.nextLine();
StringBuilder sb = new StringBuilder();
for(int i = 0; i<s.length(); i++) {
sb.append(getShiftedChar(s.charAt(i), (short)3));
}
System.out.println(sb);
fos.write(sb.toString().getBytes());
fos.write(new byte[]{13, 10});
}
sc.close();
fos.close();
}
char getShiftedChar(char c, short shift) {
int index;
if((index = _alphabeth.indexOf(c)) != -1) {
try {
return _alphabeth.charAt(index + shift);
} catch (StringIndexOutOfBoundsException e) {
return _alphabeth.charAt(index + shift + (shift>0?-_alphabeth.length():_alphabeth.length()));
}
}
if((index = _alphabeth.toLowerCase().indexOf(c)) != -1) {
try {
return _alphabeth.toLowerCase().charAt(index + shift);
} catch (StringIndexOutOfBoundsException e) {
return _alphabeth.toLowerCase().charAt(index + shift + (shift>0?-_alphabeth.length():_alphabeth.length()));
}
}
return c;
}
}