Файл: Лабораторная работа 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 и т.д. Регистр букв не
учитывать.
Ход работы
-
Пишем исходный код программы:
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;
}
}
}
}
-
Запускаем:
-
Вводим текст:
Якобы беседовал с императором. Тот спросил, в чем космическое назначение российской цивилизации.
А Соловьев возьми и скажи – это, ваше величество, переработка солнечной энергии в народное горе. За это и посадили.
Император, конечно, и сам все знает насчет солнечной энергии, но присутствовали послы, и все попало в заграничные газеты….
Факт, что любая неординарная личность, видящая свою цель в чем-то кроме воровства, традиционно воспринимается нашей
властью как источник опасности. И чем неординарней такая личность, тем сильнее власть ее боится.(Виктор Пелевин, "t")
-
Выбираем 1:
-
Выбираем 2:
-
Выбираем 3 и вводим число:
Вывод
Был продемонстрирован весь функционал требуемого приложения и предоставлен исходный код.