
Лабораторная работа №5 Головков И. Е
..docxФЕДЕРАЛЬНОЕ Государственное АВТОНОМНОЕ образовательное УЧРЕЖДЕНИЕ ВЫСШЕГО образования
«БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ
ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ»
(НИУ «БелГУ»)
ИНСТИТУТ ИНЖЕНЕРНЫХ И ЦИФРОВЫХ ТЕХНОЛОГИЙ
Отчет по лабораторной работе № 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, позволяющий зашифровать/дешифровать сообщение.