Отчет по лабораторной работе № 2
.docxФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ
Федеральное государственное образовательное бюджетное учреждение
высшего профессионального образования
«Санкт-Петербургский государственный университет телекоммуникаций
им. проф. М. А. Бонч-Бруевича»
Кафедра Безопасности информационных систем
Отчет по лабораторной работе №2
«Использование операторов и работа с примитивными типами. Приложение, реализующее побитовые операции.»
По дисциплине: «Кроссплатформенное программирование»
Цель работы:
Изучение общих принципов программирования в среде java.
Написание приложения, осуществляющего «шифрование» текста путем преобразования символов с помощью побитовых операций.
Написание простейшего приложения.
Теоретическая часть:
Выбор типа шифрования происходит через меню реализованное функцией 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();
}
}
}
Выводы:
Изучили общие принципы программирования в среде java.
Написали приложение, осуществляющее «шифрование» текста путем преобразования символов с помощью побитовых операций.