Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.nio.ByteBuffer;
- import java.sql.SQLOutput;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.InputMismatchException;
- import java.util.Scanner;
- /*
- Необходимо создать консольное приложение, осуществляющее
- «шифрование» небольшого текста путем сложения по "хоr" числового кода
- каждого символа с ключом "sekret" . Кроме сложения по "хоr". приложение
- должно поддерживать шифрование с помощью циклического сдвига на
- заданное число позиций. Текст для шифрования взять произвольно в
- количестве не менее трех строк. Приложение должно иметь текстовое меню
- со следующими пунктами:
- 1. Шифрование с помощью операции "хоr"
- 2. Шифрование с помощью циклического сдвига
- 3. Ввести число позиций для шифрования путем циклического сдвига
- При выборе пунктов 1 и 2, приложение должно раслечатывать исходный
- текст. зашифрованный текст и расшифрованный текст.
- При выборе пункта 3 приложение должно запросить у пользователя число,
- которое определяет величину сдвига, затем также распечатать исходный.
- зашифрованный и расшифрованный текст. Числовое значение буквы
- исходного текста брать по ее порядковвму номеру в алфавите.
- Так букве "А" соответствует число 1, букве "Б" соответствует число 2 и т.д.
- Регистр букв не учитывать.
- ------------
- * */
- public class Encodecoder {
- public static void main(String[] args) throws IOException {
- System.out.println("Выберите пункт меню:");
- System.out.println("1. Шифрование с помощью операции \"XOR\"");
- System.out.println("2. Шифрование циклического сдвига");
- System.out.println("3. Ввести число позиций для шифрования путем циклического сдвига");
- System.out.print("Ваш выбор: ");
- Scanner scanner = new Scanner(System.in);
- int choice = scanner.nextInt();
- String inputText;
- try { // обработка исключительной ситуации InputMismatchException на случай, если не выбрали 1,2,3 пунки и ввели символ.
- switch (choice) {
- case 1:
- System.out.println("Шифрование с помощью операции \"хоr\"");
- inputText = inputText();
- System.out.println(inputText);
- System.out.println("Зашифрованый текст: " +new String(encodeXOR(inputText,"sekret")));
- System.out.println("Содержимое текста после шифрования: ");
- // вначале кодируем, потом кодируем текст вызывая метод encodeXOR и полученный результат передаем в метод decodeXOR
- System.out.println(decodeXOR(encodeXOR(inputText,"sekret"), "sekret"));
- break;
- case 2:
- System.out.println("Шифрование циклического сдвига");
- // пока не реализовано
- break;
- case 3:
- System.out.print("Введите число позиций для шифрования путем циклического сдвига: ");
- choice = scanner.nextInt();
- // пока не реализовано
- break;
- default:
- System.out.println("Введено неверное значение, выход из программы");
- break;
- }
- } catch (InputMismatchException ime) {
- System.err.println("Неверное значение выбранного пункта. Выход из программы");
- scanner.nextLine();
- }
- }
- // ввод текста для шифрования
- public static String inputText(){
- System.out.println("Введите текст для шифрования: ");
- Scanner scanner2 = new Scanner(System.in);
- String text = "";
- System.out.print("Введите строку 1: ");
- String string1 = scanner2.nextLine();
- text += string1 + "\n";
- System.out.print("Введите строку 2: ");
- String string2 = scanner2.nextLine();
- text += string2 + "\n";
- System.out.print("Введите строку 3: ");
- String string3 = scanner2.nextLine();
- text += string3 + "\n";
- return text;
- }
- // метод шифрования строки на основе операции XOR
- public static byte[] encodeXOR(String pText, String pKey) {
- byte[] txt = pText.getBytes();
- byte[] key = pKey.getBytes();
- byte[] res = new byte[pText.length()];
- for (int i = 0; i < txt.length; i++) {
- res[i] = (byte) (txt[i] ^ key[i % key.length]);
- }
- return res;
- }
- // метод дешифрования строки на основе операции XOR
- public static String decodeXOR(byte[] pText, String pKey) {
- byte[] res = new byte[pText.length];
- byte[] key = pKey.getBytes();
- for (int i = 0; i < pText.length; i++) {
- res[i] = (byte) (pText[i] ^ key[i % key.length]);
- }
- return new String(res);
- }
- public static void cyclingEncode(String pText) {
- System.out.println("Текст для шифрования:");
- System.out.println(pText);
- System.out.println(">текст в зашифрованнои виде:");
- String res = "";
- for (int i = 0; i < pText.length();i++)
- {
- res += (char) ((int) pText.charAt(i) + 3);
- }
- System.out.println(res);
- System.out.println("\n>Расшифрвоанный текст:");
- String un_res = "";
- for (int i = 0; i < pText.length();i++)
- {
- un_res += (char) ((int) res.charAt(i) - 3);
- }
- System.out.println(un_res);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement