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

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

.docx
Скачиваний:
16
Добавлен:
03.10.2022
Размер:
692.36 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

Федеральное государственное образовательное бюджетное учреждение

высшего профессионального образования

«Санкт-Петербургский государственный университет телекоммуникаций

им. проф. М. А. Бонч-Бруевича»

Кафедра Безопасности информационных систем

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

«Использование операторов и работа с примитивными типами. Приложение, реализующее побитовые операции.»

По дисциплине: «Кроссплатформенное программирование»

Цель работы:

  1. Изучение общих принципов программирования в среде java.

  2. Написание приложения, осуществляющего «шифрование» текста путем преобразования символов с помощью побитовых операций.

  3. Написание простейшего приложения.

Теоретическая часть:

  • Выбор типа шифрования происходит через меню реализованное функцией menu с помощью оператора Switch.

  • Для ввода с клавиатуры необходимо импортировать класс Scanner, благодаря которому мы будем вводить нужный нам текст.

  • класс Scanner имеет несколько методов, например: next() – метод считывает введенную строку до первого пробела; nextLine() – метод переноса строки; nextInt() – метод считывает число типа int; nextByte() – метод превращает строку в массив чисел (типа Byte); и тд.

  • Шифрование XOR происходит с разбиванием строки на массив byte потом для каждой i-той ячейки каждого байта вычисляется XOR элемент с кодовым словом (складываем по модулю 2). Декодирование производится аналогично.

  • Для завершения работы программы используется метод exit класса System, в который в качестве аргумента передадим статус завершения работы – 0: System.exit(0).

Ход работы:

import java.util.Scanner;

public class Coder_Decoder

{

public static void main(String[] args)

{

int num = menu();

String inputLine = text();

Variant(num, inputLine);

}

private static String text()

{

System.out.print("Введите текст для зашифровки:\n");

Scanner inputLine = new Scanner(System.in);

return inputLine.nextLine();

}

private static int menu()

{

System.out.print("Выберите шифровку:");

System.out.print("\n1. Шифрование с помощью XOR");

System.out.print("\n2. Шифрование с помощью циклического сдвига");

System.out.print("\n3. Ввести число позиций для шифрования путем циклического сдвига\n");

System.out.print("Нажмите цифру 1-3: ");

Scanner var = new Scanner(System.in);

return var.nextInt();

}

private static void Variant(int num, String inputLine)

{

switch (num)

{

case 1:

System.out.print("\nВы выбрали - 'Шифрование с помощью XOR'\n");

System.out.print("Ключ шифрования: 'sekret'");

String pKey = "sekret";

byte[] inputLineEncode = inputLine.getBytes();

byte[] key = pKey.getBytes();

byte[] resEncode = new byte[inputLine.length()];

for (int i = 0; i < inputLineEncode.length; i++)

{

resEncode[i] = (byte) (inputLineEncode[i] ^ key[i % key.length]);

}

byte[] inputLineDencode = resEncode;

byte[] resDecode = new byte[inputLineDencode.length];

for (int i = 0; i < inputLineDencode.length; i++) {

resDecode[i] = (byte) (inputLineDencode[i] ^ key[i % key.length]);

}

String endLine = new String(resDecode);

System.out.print("\nВведенный текст:\n" + inputLine);

System.out.print("\nЗашифрованный текст:\n" + resEncode);

System.out.print("\nРасшифрованный текст:\n" + endLine);

exit();

break;

case 2:

System.out.print("\nВы выбрали 2 вариант - 'Шифрование с помощью циклического сдвига'\n");

System.out.print("Сдвиг на 5 знаков\n");

System.out.print("Введенный текст текст:\n" + inputLine);

int sd = 5;

for (int i = 0; i < sd; i++)

{

char temporaryChar = inputLine.charAt(inputLine.length() - 1);

inputLine = temporaryChar + inputLine;

inputLine = inputLine.substring(0, inputLine.length() - 1);

}

String fixedText1 = inputLine.substring(sd) + inputLine.substring(0, sd);

System.out.println("\nЗашифрованный текст:\n" + inputLine);

System.out.println("Расшифрованный текст:\n" + fixedText1);

exit();

break;

case 3:

System.out.print("\nВы выбрали-'Шифрование с помощью циклического сдвига'\n");

System.out.print("Введите число позиций на которой будет произведён сдвиг: ");

Scanner rotCount = new Scanner(System.in);

int rotate2 = rotCount.nextInt();

System.out.print("Исходный текст:\n" + inputLine);

for (int i = 0; i < rotate2; i++)

{

char temporaryChar = inputLine.charAt(inputLine.length() - 1);

inputLine = temporaryChar + inputLine;

inputLine = inputLine.substring(0, inputLine.length() - 1);

}

String fixedText2 = inputLine.substring(rotate2) + inputLine.substring(0, rotate2);

System.out.println("\nЗашифрованный текст:\n" + inputLine);

System.out.println("Расшифрованный текст:\n" + fixedText2);

exit();

break;

}

}

public static void exit()

{

System.out.println("\nПерейти в начало ? : y/n");

Scanner input = new Scanner(System.in);

String yn = input.nextLine();

if (yn.equals("y")) {

String[] arg = new String[0];

main(arg);

} else if (yn.equals("n"))

System.exit(0);

else {

System.out.println("Некорректная команда");

exit();

}

}

}

Выводы:

  1. Изучили общие принципы программирования в среде java.

  2. Написали приложение, осуществляющее «шифрование» текста путем преобразования символов с помощью побитовых операций.

1