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

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

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

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

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

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

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

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

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

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

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

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

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

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

Проверил:

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

БЕЛГОРОД

2023

Цель работы: рассмотреть современные системы шифрования. Познакомится с интерфейсом. Реализовать алгоритм шифрования. Шифровать/дешифровать сообщение.

Общая постановка задачи

Ход работы:

  • Рассмотреть ПО ведущих разработчиков в отрасли шифрования.

  • Познакомится с интерфейсом

  • Реализовать алгоритм шифрования/дешифрования

  • Зашифровать сообщение – сохранить результат в файл

  • Закрыть программное обеспечение

  • Открыть программное обеспечение – дешифровать файл.

  • Сравнить полученный файл с исходным

  • Сделать выводы

Для начала выполнения лабораторной работы был создан и упакован в архив текстовый файл HelloWorld.txt, содержащий строку “HelloWorld” (см. рис. 1).

Рисунок 1 – Созданный и архивированный текстовый файл

Далее с помощью разработанной программы в текстовый файл записывался 64-битный ключ для последующего использования в шифровании и дешифровании. Текстовый файл с ключом представлен на рисунке 2.

Рисунок 2 – Текстовый файл с ключом

Далее с помощью разработанной программы данные архива были считаны в массив байтов и зашифрованы с помощью реализации алгоритма ГОСТ 28147-89. После этого зашифрованные данные расшифровывались в другой массив байтов и записывались в текущей директории как архив с приставкой “Decrypted”. Расшифрованный архив с файлом внутри представлен на рисунке 3.

Рисунок 3 – Исходный текстовый файл в расшифрованном архиве

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

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

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

package org.infoprotection; import org.bouncycastle.crypto.engines.GOST28147Engine; import org.bouncycastle.crypto.modes.CFBBlockCipher; import org.bouncycastle.crypto.params.KeyParameter; import org.bouncycastle.crypto.params.ParametersWithIV; import org.bouncycastle.util.encoders.Hex; import java.io.*; public class GostAlg { public static void main(String[] args) throws IOException { byte[] key; try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("key.txt")); BufferedReader bufferedReader = new BufferedReader(new FileReader("key.txt"))) { bufferedWriter.write("00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF"); key = Hex.decode(bufferedReader.readLine()); } byte[] iv = Hex.decode("1122334455667788"); File archiveToEncrypt = new File("HelloWorld.7z"); byte[] openData = new byte[(int) archiveToEncrypt.length()]; try (InputStream inputStream = new FileInputStream(archiveToEncrypt)) { inputStream.read(openData); } byte[] encryptedData = encrypt(key, iv, openData); byte[] decryptedData = decrypt(key, iv, encryptedData); try (OutputStream outputStream = new FileOutputStream(new File("DecryptedHelloWorld.7z"))) { outputStream.write(decryptedData); } } public static byte[] encrypt(byte[] key, byte[] iv, byte[] openData) { GOST28147Engine gostsCipher = new GOST28147Engine(); gostsCipher.init(true, new KeyParameter(key)); CFBBlockCipher cfbCipher = new CFBBlockCipher(gostsCipher, 64); cfbCipher.init(true, new ParametersWithIV(new KeyParameter(key), iv)); byte[] encryptedData = new byte[openData.length]; for (int i = 0; i < openData.length; i++) { encryptedData[i] = (byte) (openData[i] ^ cfbCipher.returnByte((byte) 0)); } return encryptedData; } public static byte[] decrypt(byte[] key, byte[] iv, byte[] encryptedData) { GOST28147Engine cipher = new GOST28147Engine(); cipher.init(true, new KeyParameter(key)); CFBBlockCipher cfbCipher = new CFBBlockCipher(cipher, 64); cfbCipher.init(true, new ParametersWithIV(new KeyParameter(key), iv)); byte[] decryptedData = new byte[encryptedData.length]; for (int i = 0; i < encryptedData.length; i++) { decryptedData[i] = (byte) (encryptedData[i] ^ cfbCipher.returnByte((byte) 0)); } return decryptedData; } }

Вывод: в ходе лабораторной работы были рассмотрены современные системы шифрования. Реализован алгоритм шифрования ГОСТ 28147-89, позволяющий зашифровать/дешифровать сообщение.