Кроссплатформенное программирование. Лабораторная работа 2 По дисциплине Кроссплатформенное программирование. Фамилия Яковлев Имя Александр
![]()
|
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ им. проф. М.А. Бонч-Бруевича ФАКУЛЬТЕТ ИНСТИТУТ НЕПРЕРЫВНОГО ОБРАЗОВАНИЯ Лабораторная работа №2 По дисциплине Кроссплатформенное программирование. Фамилия: Яковлев Имя: Александр Отчество: Андреевич Курс:3 Студ. билет №:1610541 Группа №: ОБ-62з Дата сдачи работы _18.06.2019 Санкт-Петербург 2019 Цель и назначение работы Изучение общих принципов программирования в среде 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 и вводим число: ![]() Вывод Был продемонстрирован весь функционал требуемого приложения и предоставлен исходный код. |