Лабораторная работа №3 Головков И. Е
..docxФЕДЕРАЛЬНОЕ Государственное АВТОНОМНОЕ образовательное УЧРЕЖДЕНИЕ ВЫСШЕГО образования
«БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ
ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ»
(НИУ «БелГУ»)
ИНСТИТУТ ИНЖЕНЕРНЫХ И ЦИФРОВЫХ ТЕХНОЛОГИЙ
Отчет по лабораторной работе № 3
Вариант № 6
Тема работы «Алгоритм Цезаря, алгоритм Виженера»
по дисциплине «Методы и средства защиты информации»
студента очного отделения
3 курса 12002108 группы
Головкова Игоря Евгеньевича
Проверил:
доц. Титов А. И.
БЕЛГОРОД
2023
Цель работы: применить на практике знания по алгоритмам шифрования Цезаря и Виженера. Реализовать алгоритмы программно. Шифровать/дешифровать сообщения при помощи написанного программного обеспечения.
Ход работы:
Выбрать алфавит, подходящий для шифрования сообщения полученного в ходе выполнения Лабораторной работы №1
Реализовать программное обеспечение для шифрования/дешифрования при помощи выбранного алфавита и алгоритма
Зашифровать сообщение – сохранить результат в файл
Закрыть программное обеспечение
Открыть программное обеспечение – дешифровать файл.
Сравнить полученный файл с исходным
Сделать выводы
Исходный текст для шифрования:
Весьма примечательны атрибуты современного научного мышления - элементы симметрии и асимметрии. Нет ли их в обобщенной модели управления, не раскрывают ли они еще глубже негэнтропийную функцию механизма управления, ее системоорганизующую роль? Поставлена также задача рассмотреть место таких парных философских категорий, как: устойчивость-изменчивость, функция-структура, движение-развитие (в феномене управления). Оказывается, они весьма наглядно подставлены в обобщенной модели управления и имеют самое прямое отношение к понятиям симметрии и асимметрии, что доходчиво иллюстрируется рядом схем и примеров.
Зашифрованный текст (ключ шифрования - «ГРАД»:
Ехсѐпр уушмйъртйоќня#ртфлсуцю0стеѐериэнтжю сгѓчссуо$пћшпиэиѓ#= ёохмйрђы$фшмриђрмл0и$гёирпхтфлш.$Рхт$ош мш0в$ссоеьхнссщ рсфепл0ууурвпиэиѓ/0нй#ѐахнѐыжгўт$ош трш йьх зоѓбки0нйжѝнцуюпммэуђ#єусніиђ#ьещгэилпр чтѐажохнмђ< йи0смфђерсюрзгэилцўщчё0ртоќ?$Тюсцгтлйрр цгъжй#чаигїа$урсхпютфиђь$пхсцс0тдншх$тррсюѕ шлыохсєсолѕ огђезсѐин/0кднJ чфђонъшвтфђь1лчмйрїижсётѐ/0фчръцмђ=сцуѓкццѐа0#фвмйхнми=рдктицлх ,е0фйрюмйрх чтѐажохнмђ9.$Съалютайхёя0#юнм#техяьа$рргпђфнт#яоифђажохня#т тдюбэиэнтм0мтзхлм#ѓпфгтлйршя$л0ириўт$фрмти0пфђьой#ютссјеслх о#яосђђиѓп0смпьецуши$л0ахльмйхѐим/0чцс0дтшюдылто$лылђфђрмуѓецфџ фђфор#ёхйп0и$тѐириѐож1
Б лок-схема алгоритма представлена на рисунке 1.
Рисунок 1– Блок-схема алгоритма
Листинг программы на языке Java:
package org.infoprotection; import java.io.*; import java.util.Scanner; public class Vigenere { static Scanner read = new Scanner(System.in); public static void main(String[] args) { Vigenere vigenere = new Vigenere(); vigenere.chooseMode(); } private void chooseMode() { BufferedReader bufferedReader; BufferedWriter bufferedWriter; System.out.println(""" Введите номер требуемой функции программы: 1. Зашифровать с помощью шифра Виженера 2. Расшифровать с помощью шифра Виженера 0. Завершить работу """); switch (Integer.parseInt(read.nextLine())) { case 1 -> { bufferedReader = initBufferedReader(); bufferedWriter = initBufferedWriter(); encryptVigenere(bufferedReader, bufferedWriter); System.out.println("Зашифровано"); } case 2 -> { bufferedReader = initBufferedReader(); bufferedWriter = initBufferedWriter(); decryptVigenere(bufferedReader, bufferedWriter); System.out.println("Расшифровано"); } default -> { return; } } closeBufferedReader(bufferedReader); closeBufferedWriter(bufferedWriter); chooseMode(); } private BufferedReader initBufferedReader() { System.out.println("Введите имя входного файла: "); 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 encryptVigenere(BufferedReader bufferedReader, BufferedWriter bufferedWriter) { System.out.println("Введите ключ: "); char[] key = read.nextLine().toCharArray(); try { char[] word = bufferedReader.readLine().toCharArray(); for (int i = 0; i < word.length; i++) { word[i] += (char) (key[i % (key.length)] - 'А'); bufferedWriter.write((word[i])); } } catch (IOException e) { throw new RuntimeException(); } } private void decryptVigenere(BufferedReader bufferedReader, BufferedWriter bufferedWriter) { System.out.println("Введите ключ"); char[] key = read.nextLine().toCharArray(); try { char[] word = bufferedReader.readLine().toCharArray(); for (int i = 0; i < word.length; i++) { word[i] -= (char) (key[i % (key.length)] - 'А'); bufferedWriter.write((word[i])); } } catch (IOException e) { throw new RuntimeException(); } } }
Вывод: были применены на практике знания по алгоритмам шифрования Цезаря и Виженера с помощью программной реализации.