Скачиваний:
9
Добавлен:
09.04.2023
Размер:
40.04 Кб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,

СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»

(СПбГУТ)

Факультет Инфокоммуникационных сетей и систем

Кафедра Защищенных систем связи

Дисциплина Разработка защищенного программного обеспечения

ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №9

Обработка бинарных файлов

(тема отчета)

Направление/специальность подготовки

10.03.01 Информационная безопасность

(код и наименование направления/специальности)

Студент:

(Ф.И.О., № группы) (подпись)

Преподаватель:

Цветков А.Ю.

(Ф.И.О) (подпись)

Цель лабораторной работы

  1. Освоить работу с бинарными файлами с использованием средств Java

Используемое программное обеспечение

  1. JDK 1.5 и выше.

  2. Интегрированная среда разработки на Java.

Задание на лабораторную работу

  1. Программа получает в аргументах 3 адреса файла и 1 число (ключ дешифрования)

  • args[0] - адрес исходного зашифрованного файла

  • args[1] - адрес расшифрованного файла

  • args[2] - адрес файла результата

  • args[3] - ключ дешифрования (byte). Для конвертирования в byte использовать Byte.parseByte(args[3])

  1. Написать программу, которая:

  • Расшифровывает файл args[0] ключём args[3] по алгоритму XOR

  • Записывает результат расшифровки в файл args[1]

  • Над расшифрованным файлом выполняет указанные в задании действия, записывая результат задачи в файл args[2]

  1. Проверить правильность работы программы

  2. Собрать исполняемый jar и отправить на проверку

Основное задание:

После расшифровки файла args[0] в args[1] ключём args[3] проделать над ним следующие операции:

  • Считать переменную типа byte и вычесть 105

  • Считать переменную типа int и умножить на 105

  • Считать переменную типа long и прибавить 105

Результат каждой операции сохраняется в конечный файл args[2] long) Листинг программного кода основного задания

import java.io.*;

public class Main {

    public static void main(String[] args) {

    String inputfile = args[0];

    String decryptfile = args[1];

    String output = args[2];

    byte key = Byte.parseByte(args[3]);

    DataOutputStream dos;

    DataInputStream dis;

    try {

        dis = new DataInputStream(new FileInputStream(inputfile));

        dos = new DataOutputStream(new FileOutputStream(decryptfile));

        while (dis.available() > 0) {

            byte x = dis.readByte();

            x ^= key;

            dos.writeByte(x);

        }

        // Очистка внутреннего буффера и запись в файл

        dos.flush();

        dos.close();

    } catch (IOException e) {

        e.printStackTrace();

    }

    try {

        dis = new DataInputStream(new FileInputStream(decryptfile));

        dos = new DataOutputStream(new FileOutputStream(output));

   

        dos.writeByte( (byte) dis.readByte() - 105 );

        dos.writeInt( (int) dis.readInt() * 105 );

        dos.writeLong( (long) dis.readLong() + 105 );

   

        // Очистка внутреннего буффера и запись в файл

        dos.flush();

        dos.close();

    } catch (IOException e) {

        e.printStackTrace();

    }

}

}

Вариант дополнительного задания

Зашифровать конечный файл args[2] в файл args[4] Ключ для повторного шифрования отличается. Передаётся аргументом args[5] Итого (в доп задаче):

  • args[0] - исходный зашифрованный файл с задачей

  • args[1] - файл, куда писать расшифровку args[0]

  • args[2] - файл, куда писать результаты операций над args[1]

  • args[4] - сюда зашифровать повторно файл args[2]

  • ....

  • args[3] - ключ расшифровки исходного файла args[0]

  • args[5] - ключ для повторного шифрования в файл args[4]

Листинг программного кода дополнительного задания

import java.io.*;

public class Dop {

    public static void main(String[] args) {

    String inputfile = args[0];

    String decryptfile = args[1];

    String output = args[2];

    byte key = Byte.parseByte(args[3]);

    String outputdecrypt = args[4];

    byte newkey = Byte.parseByte(args[5]);

    DataOutputStream dos;

    DataInputStream dis;

    try {

        dis = new DataInputStream(new FileInputStream(inputfile));

        dos = new DataOutputStream(new FileOutputStream(decryptfile));

        while (dis.available() > 0) {

            byte x = dis.readByte();

            x ^= key;

            dos.writeByte(x);

        }

        // Очистка внутреннего буффера и запись в файл

        dos.flush();

        dos.close();

    } catch (IOException e) {

        e.printStackTrace();

    }

    try {

        dis = new DataInputStream(new FileInputStream(decryptfile));

        dos = new DataOutputStream(new FileOutputStream(output));

       

        byte xbyte = (byte) dis.readByte();

        int xint = (int) dis.readInt();

        Long xlong = (long) dis.readLong();

       

        dos.writeByte( (byte) (xbyte - 105) );

        dos.writeInt( (int) (xint * 105) );

        dos.writeLong( (Long) (xlong + 105) );

        // Очистка внутреннего буффера и запись в файл

        dos.flush();

        dos.close();

    } catch (IOException e) {

        e.printStackTrace();

    }

    try {

        dis = new DataInputStream(new FileInputStream(output));

        dos = new DataOutputStream(new FileOutputStream(outputdecrypt));

        while (dis.available() > 0){

            byte x = dis.readByte();

            x ^= newkey;

            dos.writeByte(x);

        }

       

        // Очистка внутреннего буффера и запись в файл

        dos.flush();

        dos.close();

    } catch (IOException e) {

        e.printStackTrace();

    }

}

}

Вывод

Изучены основные средства для работы с бинарными файлами в языке Java из пакета java.io, представляющие собой потоки ввода-вывода

Санкт-Петербург

2021

Соседние файлы в предмете Разработка защищенного программного обеспечения