Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №1 Головков И. Е

..docx
Скачиваний:
3
Добавлен:
26.06.2024
Размер:
201.38 Кб
Скачать

ФЕДЕРАЛЬНОЕ Государственное АВТОНОМНОЕ образовательное УЧРЕЖДЕНИЕ ВЫСШЕГО образования

«БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ

ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ»

(НИУ «БелГУ»)

ИНСТИТУТ ИНЖЕНЕРНЫХ И ЦИФРОВЫХ ТЕХНОЛОГИЙ

Отчет по лабораторной работе № 1

Вариант № 6

Тема работы «Программная реализация простых шифров перестановки и замены»

по дисциплине «Методы и средства защиты информации»

студента очного отделения

3 курса 12002108 группы

Головкова Игоря Евгеньевича

Проверил:

доц. Титов А. И.

БЕЛГОРОД

2023

Цель работы: применить на практике полученные знания о тайнописи. Реализовать алгоритм создания шифр текста.

Ход работы:

Получить текст из варианта.

Разработать алгоритм шифрования с применением полученных знаний по теме Тайнопись. Зашифровать текст – передать шифрованный напарнику. Получить шифрованный текст от напарника, расшифровать. Сделать выводы.

Специальный ключ для шифрования и дешифрования представлен на рисунке 1.

Рисунок 1 – Таблица-ключ для шифрования

Исходный текст для шифрования:

Весьма примечательны атрибуты современного научного мышления - элементы симметрии и асимметрии. Нет ли их в обобщенной модели управления, не раскрывают ли они еще глубже негэнтропийную функцию механизма управления, ее системоорганизующую роль? Поставлена также задача рассмотреть место таких парных философских категорий, как: устойчивость-изменчивость, функция-структура, движение-развитие (в феномене управления). Оказывается, они весьма наглядно подставлены в обобщенной модели управления и имеют самое прямое отношение к понятиям симметрии и асимметрии, что доходчиво иллюстрируется рядом схем и примеров.

Зашифрованный текст:

згД1фЮ ПпъфгБЮЁгЙ1ща ЮЁпъЩКЁа ДВупгфгщщВкВ щЮКБщВкВ фачЙгщъХ - ЪЙгфгщЁа ДъффгЁпъъ ъ ЮДъффгЁпъъ. 8гЁ Йъ ъб у ВЩВЩОгщщВё фВцгЙъ КПпЮуЙгщъХ, щг пЮДяпауЮэЁ Йъ Вщъ гОг кЙКЩШг щгкЪщЁпВПъёщКэ ИКщяЬъэ фгбЮщъЖфЮ КПпЮуЙгщъХ, гг ДъДЁгфВВпкЮщъЖКэОКэ пВЙ1? сВДЁЮуЙгщЮ ЁЮяШг ЖЮцЮБЮ пЮДДфВЁпгЁ1 фгДЁВ ЁЮяъб ПЮпщаб ИъЙВДВИДяъб яЮЁгкВпъё, яЮя: КДЁВёБъуВДЁ1-ъЖфгщБъуВДЁ1, ИКщяЬъХ-ДЁпКяЁКпЮ, цуъШгщъг-пЮЖуъЁъг (у ИгщВфгщг КПпЮуЙгщъХ). УяЮЖауЮгЁДХ, Вщъ угД1фЮ щЮкЙХцщВ ПВцДЁЮуЙгща у ВЩВЩОгщщВё фВцгЙъ КПпЮуЙгщъХ ъ ъфгэЁ ДЮфВг ПпХфВг ВЁщВчгщъг я ПВщХЁъХф ДъффгЁпъъ ъ ЮДъффгЁпъъ, БЁВ цВбВцБъуВ ъЙЙэДЁпъпКгЁДХ пХцВф Дбгф ъ ПпъфгпВу.

Блок-схема алгоритма представлена на рисунке 2.

Рисунок 2 – Блок-схема алгоритма

Листинг программы:

package org.infoprotection; import java.io.*; import java.util.Scanner; public class OwnReplacer { static Scanner read = new Scanner(System.in); public static void main(String[] args) { OwnReplacer ownReplacer = new OwnReplacer(); ownReplacer.chooseMode(); } private void chooseMode() { BufferedReader bufferedReader; BufferedWriter bufferedWriter; System.out.println(""" Введите номер требуемой функции программы: 1. Зашифровать текст 2. Расшифровать текст 0. Завершить работу """); switch (read.nextInt()) { case 1 -> { bufferedReader = initBufferedReader(); bufferedWriter = initBufferedWriter(); encryptCipher(bufferedReader, bufferedWriter, true); System.out.println("Зашифровано"); } case 2 -> { bufferedReader = initBufferedReader(); bufferedWriter = initBufferedWriter(); encryptCipher(bufferedReader, bufferedWriter, false); System.out.println("Расшифровано"); } default -> { return; } } closeBufferedReader(bufferedReader); closeBufferedWriter(bufferedWriter); chooseMode(); } private BufferedReader initBufferedReader() { System.out.println("Введите имя входного файла: "); read.skip("((?<!\\R)\\s)*"); String fileNameRead = read.nextLine(); try { return new BufferedReader(new InputStreamReader((new FileInputStream(new File(fileNameRead))))); } catch (FileNotFoundException e) { throw new RuntimeException(e); } } private void closeBufferedReader(BufferedReader bufferedReader) { try { bufferedReader.close(); } catch (IOException e) { throw new RuntimeException(e); } } private BufferedWriter initBufferedWriter() { System.out.println("Введите имя выходного файла : "); String fileNameWrite = read.nextLine(); try { return new BufferedWriter(new OutputStreamWriter((new FileOutputStream(new File(fileNameWrite))))); } catch (IOException e) { throw new RuntimeException(e); } } private void closeBufferedWriter(BufferedWriter bufferedWriter) { try { bufferedWriter.close(); } catch (IOException e) { throw new RuntimeException(e); } } private void encryptCipher(BufferedReader bufferedReader, BufferedWriter bufferedWriter, boolean isForEncrypt) { char[] ABC = { 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' }; char[] cryptABC = { 'н', 'С', 'з', '6', '4', '9', 'Я', 'л', 'й', 'м', 'р', 'Ы', 'т', 'в', '8', 'У', 'с', 'Ф', 'А', 'и', 'З', 'х', 'ю', 'Н', 'д', 'о', '7', 'Ч', 'е', 'Т', '3', 'Ц', 'Е', 'Ю', 'Щ', 'у', 'к', 'ц', 'г', '5', 'Ш', 'Ж', 'ъ', 'ё', 'я', 'Й', 'ф', 'щ', 'В', 'П', 'п', 'Д', 'Ё', 'К', 'И', 'б', 'Ь', 'Б', 'ч', 'О', 'ж', 'а', '1', 'Ъ', 'э', 'Х', '2', 'Г', 'Э', 'ш', '0', 'ы', 'Р', 'М', 'Л', 'ь' }; String text; StringBuilder encryptedText = new StringBuilder(); try { text = bufferedReader.readLine(); } catch (IOException e) { throw new RuntimeException(e); } for (int i = 0; i < text.length(); i++) { String character = String.valueOf(text.charAt(i)); if (Character.isDigit(character.charAt(0)) || Character.isLetter(character.charAt(0))) { for (int j = 0; j < ABC.length; j++) { if (isForEncrypt) { if (character.equals(String.valueOf(ABC[j]))) { character = character.replace(ABC[j], cryptABC[j]); encryptedText.append(character); break; } } else { if (character.equals(String.valueOf(cryptABC[j]))) { character = character.replace(cryptABC[j], ABC[j]); encryptedText.append(character); break; } } } } else { encryptedText.append(character); } } try { bufferedWriter.write(encryptedText.toString()); } catch (IOException e) { throw new RuntimeException(e); } } }

Вывод: были изучены алгоритмы тайнописи, а также разработан собственный алгоритм шифрования.