Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Защ.дан. ЛР4.docx
Скачиваний:
0
Добавлен:
17.09.2019
Размер:
48.43 Кб
Скачать

Лабораторна работа №4.

Криптографические методы защиты информации.

Шифрование

Задание: Зашифровать и расшифровать текст с использованием шифра Плейфера. В качестве входного текста взять реферат их первой работы.

т

а

н

ц

о

р

б

в

г

д

е

є

ж

з

и

і

ї

й

к

л

м

п

с

у

ф

х

ч

ш

щ

ь

ю

я

.

,

_


Использовал ключевое слово : Танцор

1.Теория

Шифр Плейфера использует матрицу 5х5 (для латинского алфавита, для кирилического алфавита необходимо увеличить размер матрицы до 4х8), содержащую ключевое слово или фразу. Для создания матрицы и использования шифра достаточно запомнить ключевое слово и четыре простых правила. Чтобы составить ключевую матрицу, в первую очередь нужно заполнить пустые ячейки матрицы буквами ключевого слова (не записывая повторяющиеся символы), потом заполнить оставшиеся ячейки матрицы символами алфавита, не встречающимися в ключевом слове, по порядку (в английских текстах обычно опускается символ «Q», чтобы уменьшить алфавит, в других версиях «I» и «J» объединяются в одну ячейку). Ключевое слово может быть записано в верхней строке матрицы слева направо, либо по спирали из левого верхнего угла к центру. Ключевое слово, дополненное алфавитом составляет матрицу 5х5 и является ключом шифра.

Для того, чтобы зашифровать сообщение необходимо разбить его на биграммы (группы из двух символов), например «Hello World» становится «HE LL OW OR LD», и отыскать эти биграммы в таблице. Два символа биграммы соответствуют углам прямоугольника в ключевой матрице. Определяем положения углов этого прямоугольника относительно друг друга. Затем руководствуясь следующими 4 правилами зашифровываем пары символов исходного текста:

1. Если два символа биграммы совпадают, добавляем после первого символа «Х», зашифровываем новую пару символов и продолжаем. В некоторых вариантах шифра Плейфера вместо «Х» используется «Q».

2. Если символы биграммы исходного текста встречаются в одной строке, то эти символы замещаются на символы, расположенные в ближайших столбцах справа от соответствующих символов. Если символ является последним в строке, то он заменяется на первый символ этой же строки.

3. Если символы биграммы исходного текста встречаются в одном столбце, то они преобразуются в символы того же столбца, находящимися непосредственно под ними. Если символ является нижним в столбце, то он заменяется на первый символ этого же столбца.

4. Если символы биграммы исходного текста находятся в разных столбцах и разных строках, то они заменяются на символы, находящиеся в тех же строках, но соответствующие другим углам прямоугольника.

Для расшифровки необходимо использовать инверсию этих четырёх правил, откидывая символы «Х» (или «Q»), если они не несут смысла в исходном сообщении.

2. Реферат – небольшая часть для примера работы программы.

Закон України «Про інформацію»

Закон України «Про інформацію» закріплює право громадянУкраїни на інформацію, закладаєправовіосновиінформаційноїдіяльності, визначаєправовіформиміжнародногоспівробітництва в галузіінформації. Діяцього закону поширюється на інформаційнівідносини, яківиникають у всіх сферах життя і діяльностісуспільства і держави при одержанні, використанні, поширенні та зберіганніінформації. Закон складається з 6 розділів та 54 статей.

Розділ 1 цього Закону присвяченийзагальнимположенням, визначенню мети та завданнями Закону, а самеправовим основам одержання, використання, поширенняінформації в усіх сферах суспільногожиттяУкраїни, а такожсистеміінформації, їїджерелам, визначає статус учасниківінформаційнихвідносин,регулює доступ до інформації та забезпечуєїїохорону, захищає особу та суспільствовіднеправдивоїінформації. В ст..5 визначаютьпринципиінформаційнихвідносин: гарантованість права на інформацію, відкритість, доступністьінформації та свобода їїобміну, повнота і точністьінформації, законністьодержання, використання, поширення та зберіганняінформації.

3.Программа:

Файл cod2.java

package cod2;

import java.util.Scanner;

/**

*

* @author kalambyryura

*/

public class Cod2 {

private char[][] Table1 = {

{'т', 'а', 'н', 'ц', 'о', 'р'},

{'б', 'в', 'г', 'д', 'е', 'є'},

{'ж', 'з', 'и', 'і', 'ї', 'й'},

{'к', 'л', 'м', 'п', 'с', 'у'},

{'ф', 'х', 'ц', 'ш', 'щ', 'ь'},

{'ю', 'я', '.', ',', ' ', '\’'}

};

public String CodedText = "";

Files f = new Files();

/**

* @param args the command line arguments

*/

public static void main(String[] args) {

new Cod2().run();

}

private void run() {

System.out.println("Если хотите закодировать текст поместите его в файл \"data.txt\"");

System.out.println("результат кодирования будет в файле \"cod.txt\"");

System.out.println("\nЕсли хотите декодировать текст поместите его в файл \"cod.txt\"");

System.out.println("результат кодирования будет в файле \"data.txt\"");

System.out.println("\nКодировать нажмите 1");

System.out.println("Декодировать нажмите 2");

System.out.println("Любой другой чтобы выйти");

System.out.printf("Ваш выбор:");

Scanner s = new Scanner(System.in);

switch (s.nextInt()) {

case 1:

coding(f.readFromFile("D:/data.txt"));

f.writeToFile(CodedText, "D:/cod.txt");

break;

case 2:

coding(f.readFromFile("D:/cod.txt"));

f.writeToFile(CodedText, "D:/data.txt");

break;

default:

System.exit(0);

}

}

private void coding(String Text) {

int i1, i2, j1, j2;

int Tb1, Tb2 = 0;

for (int i = 0; i <Text.length(); i += 2) {

Tb1 = searchInTable1(Text.charAt(i));

if ((i + 1) >= Text.length()) {

Tb2 = searchInTable1(' ');

} else {

Tb2 = searchInTable1(Text.charAt(i + 1));

}

j1 = (int) Tb1 % 10;

i1 = (int) (Tb1 - j1) / 10;

j2 = (int) Tb2 % 10;

i2 = (int) (Tb2 - j2) / 10;

CodedText += Character.toString(Table1[i2][j1]) + Character.toString(Table1[i1][j2]);

if (i = i)(Char(‘ю’))

}

}

private int searchInTable1(char c) {

for (int i = 0; i < Table1.length; i++) {

for (int j = 0; j < Table1.length; j++) {

if (c == Table1[i][j]) {

return (i * 10) + j;

}

}

}

return 99;

}

private String cheсk(String Text) {

if ((Text.length() % 2) == 1) {

return Text += " ";

}

return Text;

}

Файл Files.java

package cod2;

import java.io.*;

import java.util.logging.Level;

import java.util.logging.Logger;

public class Files {

public String readFromFile(String file) {

BufferedReader in = null;

try {

in = new BufferedReader(new FileReader(file));

} catch (FileNotFoundException ex) {

Logger.getLogger(Cod2.class.getName()).log(Level.SEVERE, null, ex);

}

String line = null, nextLine = "";

try {

while ((line = in.readLine()) != null) {

nextLine += line;

}

} catch (IOException ex) {

Logger.getLogger(Cod2.class.getName()).log(Level.SEVERE, null, ex);

}

return nextLine;

}

public void writeToFile(String s, String file) {

FileWriter out = null;

try {

out = new FileWriter(file);

} catch (IOException ex) {

Logger.getLogger(Files.class.getName()).log(Level.SEVERE, null, ex);

}

try {

out.write(s);

} catch (IOException ex) {

Logger.getLogger(Files.class.getName()).log(Level.SEVERE, null, ex);

}

try {

out.close();

} catch (IOException ex) {

Logger.getLogger(Files.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]