Файл: Лабораторная работа 2 По дисциплине Кроссплатформенное программирование. Фамилия Волков Имя Кирилл.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 22.11.2023

Просмотров: 13

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ

УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ им. проф. М.А. Бонч-Бруевича

ФАКУЛЬТЕТ ИНСТИТУТ НЕПРЕРЫВНОГО ОБРАЗОВАНИЯ
Лабораторная работа №2

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

Фамилия: Волков

Имя: Кирилл

Отчество: Владимирович

Курс:3

Дата сдачи работы _22.04.2023

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

2023

Цель и назначение работы

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

Написание приложения, осуществляющего «шифрование» текста путем

преобразования символов с помощью побитовых операций.

Необходимо создать консольное приложение, осуществляющее

«шифрование» небольшого текста путем сложения по "XOR" числового кода

каждого символа с ключом "sekret". Кроме сложения по "XOR", приложение

должно поддерживать шифрование с помощью циклического сдвига на

заданное число позиций. Текст для шифрования взять произвольно в

количестве не менее трех строк. Приложение должно иметь текстовое меню

со следующими пунктами:

1. Шифрование с помощью операции "XOR"

2. Шифрование с помощью циклического сдвига

3. Ввести число позиций для шифрования путем циклического сдвига

При выборе пунктов 1 и 2, приложение должно распечатывать исходный

текст, зашифрованный текст и расшифрованный текст.

При выборе пункта 3 приложение должно запросить у пользователя число,

которое определяет величину сдвига, затем также распечатать исходный,

зашифрованный и расшифрованный текст. Числовое значение буквы

исходного текста брать по её порядковому номеру в алфавите. Так букве "А"

соответствует число 1, букве "Б" соответствует число 2 и т.д. Регистр букв не

учитывать.

Ход работы

  1. Пишем исходный код программы:

import java.util.Scanner;

public class App
{


private static final int DEFAULT_SHIFT_POSITION_NUMBER = 1;
private static final String XOR_ENCRYPTION_KEY = "sekret";

private static String xorEncryption(String text, String key){
char[] encrypted = new char[text.length()];
char[] source = text.toCharArray();
char[] keyChars = key.toCharArray();
for(int i = 0; i < text.length(); i++){
encrypted[i] = (char)(source[i] ^ keyChars[i % key.length()]);
}
return new String(encrypted);
}

private static String cyclicShiftEncryption(String text, int positionNumber){
char[] encrypted = new char[text.length()];
char[] source = text.toCharArray();
for(int i = 0; i < text.length(); i++){
encrypted[i] = (char)(source[i] + positionNumber);
}
return new String(encrypted);
}

private static String cyclicShiftDecryption(String text, int positionNumber){
return cyclicShiftEncryption(text, -positionNumber);
}

public static void main(String[] args)
{
try(Scanner scanner = new Scanner(System.in))
{
System.out.println("Please input source text:");
StringBuilder sourceTextBuilder = new StringBuilder();
String line;
while(!(line = scanner.nextLine()).isEmpty())
{
sourceTextBuilder.append(line).append('\n');
}
String sourceText = sourceTextBuilder.toString();

System.out.println("Source text is:\n" + sourceText);

System.out.println();
System.out.println();
System.out.println("Please choose one of the above:");
System.out.println("\t1)XOR encryption");
System.out.println("\t2)Cyclic shift encryption");
System.out.println("\t3)Input positions number for cyclic shift encryption");


int input = scanner.nextInt();
switch(input){
case 1:
System.out.println("Source text is: ");
System.out.println(sourceText);
System.out.println();
System.out.println("Encrypted text is ");
String xorRncrypted = xorEncryption(sourceText, XOR_ENCRYPTION_KEY);
System.out.println(xorRncrypted);
System.out.println();
System.out.println("Decrypted text is ");
System.out.println(xorEncryption(xorRncrypted, XOR_ENCRYPTION_KEY));
break;
case 2:
System.out.println("Source text is: ");
System.out.println(sourceText);
System.out.println();
System.out.println("Encrypted text is ");
String cyclicShiftEncrypted = cyclicShiftEncryption(sourceText,
DEFAULT_SHIFT_POSITION_NUMBER);
System.out.println(cyclicShiftEncrypted);
System.out.println();
System.out.println("Decrypted text is ");
System.out.println(cyclicShiftDecryption(cyclicShiftEncrypted,
DEFAULT_SHIFT_POSITION_NUMBER));
break;
case 3:
int shiftNumber = scanner.nextInt();
System.out.println("Source text is: ");
System.out.println(sourceText);
System.out.println();
System.out.println("Encrypted text is ");
String numberCyclicShiftEncrypted = cyclicShiftEncryption(sourceText,
shiftNumber);
System.out.println(numberCyclicShiftEncrypted);
System.out.println();
System.out.println("Decrypted text is ");
System.out.println(cyclicShiftDecryption(numberCyclicShiftEncrypted,
shiftNumber));
break;
}
}
}
}

  1. Запускаем:



  1. Вводим текст:


Якобы беседовал с императором. Тот спросил, в чем космическое назначение российской цивилизации.
А Соловьев возьми и скажи – это, ваше величество, переработка солнечной энергии в народное горе. За это и посадили.
Император, конечно, и сам все знает насчет солнечной энергии, но присутствовали послы, и все попало в заграничные газеты….
Факт, что любая неординарная личность, видящая свою цель в чем-то кроме воровства, традиционно воспринимается нашей
властью как источник опасности. И чем неординарней такая личность, тем сильнее власть ее боится.(Виктор Пелевин, "t")


  1. Выбираем 1:



  1. Выбираем 2:



  1. Выбираем 3 и вводим число:



Вывод

Был продемонстрирован весь функционал требуемого приложения и предоставлен исходный код.