Advertisement
VastMind

Untitled

May 25th, 2018
546
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.09 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.nio.ByteBuffer;
  5. import java.sql.SQLOutput;
  6. import java.util.ArrayList;
  7. import java.util.Arrays;
  8. import java.util.InputMismatchException;
  9. import java.util.Scanner;
  10.  
  11. /*
  12. Необходимо создать консольное приложение, осуществляющее
  13. «шифрование» небольшого текста путем сложения по "хоr" числового кода
  14. каждого символа с ключом "sekret" . Кроме сложения по "хоr". приложение
  15. должно поддерживать шифрование с помощью циклического сдвига на
  16. заданное число позиций. Текст для шифрования взять произвольно в
  17. количестве не менее трех строк. Приложение должно иметь текстовое меню
  18. со следующими пунктами:
  19.  
  20. 1. Шифрование с помощью операции "хоr"
  21. 2. Шифрование с помощью циклического сдвига
  22. 3. Ввести число позиций для шифрования путем циклического сдвига
  23.  
  24. При выборе пунктов 1 и 2, приложение должно раслечатывать исходный
  25. текст. зашифрованный текст и расшифрованный текст.
  26.  
  27. При выборе пункта 3 приложение должно запросить у пользователя число,
  28. которое определяет величину сдвига, затем также распечатать исходный.
  29. зашифрованный и расшифрованный текст. Числовое значение буквы
  30. исходного текста брать по ее порядковвму номеру в алфавите.
  31. Так букве "А" соответствует число 1, букве "Б" соответствует число 2 и т.д.
  32. Регистр букв не учитывать.
  33. ------------
  34. * */
  35. public class Encodecoder {
  36.  
  37.     public static void main(String[] args) throws IOException {
  38.  
  39.         System.out.println("Выберите пункт меню:");
  40.         System.out.println("1. Шифрование с помощью операции \"XOR\"");
  41.         System.out.println("2. Шифрование циклического сдвига");
  42.         System.out.println("3. Ввести число позиций для шифрования путем циклического сдвига");
  43.         System.out.print("Ваш выбор: ");
  44.         Scanner scanner = new Scanner(System.in);
  45.  
  46.         int choice = scanner.nextInt();
  47.  
  48.         String inputText;
  49.  
  50.         try { // обработка исключительной ситуации InputMismatchException на случай, если не выбрали 1,2,3 пунки и ввели символ.
  51.  
  52.             switch (choice) {
  53.                 case 1:
  54.  
  55.                     System.out.println("Шифрование с помощью операции \"хоr\"");
  56.  
  57.  
  58.                     inputText = inputText();
  59.                     System.out.println(inputText);
  60.                     System.out.println("Зашифрованый текст: " +new String(encodeXOR(inputText,"sekret")));
  61.                     System.out.println("Содержимое текста после шифрования: ");
  62.                     // вначале кодируем, потом кодируем текст вызывая метод encodeXOR и полученный результат передаем в метод decodeXOR
  63.                     System.out.println(decodeXOR(encodeXOR(inputText,"sekret"), "sekret"));
  64.                     break;
  65.  
  66.                 case 2:
  67.  
  68.                     System.out.println("Шифрование циклического сдвига");
  69.                     // пока не реализовано
  70.                     break;
  71.  
  72.                 case 3:
  73.  
  74.                     System.out.print("Введите число позиций для шифрования путем циклического сдвига: ");
  75.                     choice = scanner.nextInt();
  76.                     // пока не реализовано
  77.                     break;
  78.  
  79.                 default:
  80.  
  81.                     System.out.println("Введено неверное значение, выход из программы");
  82.  
  83.                     break;
  84.             }
  85.         } catch (InputMismatchException ime) {
  86.             System.err.println("Неверное значение выбранного пункта. Выход из программы");
  87.             scanner.nextLine();
  88.         }
  89.     }
  90.     // ввод текста для шифрования
  91.     public static String inputText(){
  92.         System.out.println("Введите текст для шифрования: ");
  93.         Scanner scanner2 = new Scanner(System.in);
  94.         String text = "";
  95.  
  96.         System.out.print("Введите строку 1: ");
  97.         String string1 = scanner2.nextLine();
  98.         text += string1 + "\n";
  99.         System.out.print("Введите строку 2: ");
  100.  
  101.         String string2 = scanner2.nextLine();
  102.         text += string2 + "\n";
  103.         System.out.print("Введите строку 3: ");
  104.  
  105.         String string3 = scanner2.nextLine();
  106.         text += string3 + "\n";
  107.         return text;
  108.     }
  109.     // метод шифрования строки на основе операции XOR
  110.     public static byte[] encodeXOR(String pText, String pKey) {
  111.         byte[] txt = pText.getBytes();
  112.         byte[] key = pKey.getBytes();
  113.         byte[] res = new byte[pText.length()];
  114.  
  115.         for (int i = 0; i < txt.length; i++) {
  116.             res[i] = (byte) (txt[i] ^ key[i % key.length]);
  117.         }
  118.  
  119.         return res;
  120.     }
  121.     // метод дешифрования строки на основе операции XOR
  122.     public static String decodeXOR(byte[] pText, String pKey) {
  123.         byte[] res = new byte[pText.length];
  124.         byte[] key = pKey.getBytes();
  125.  
  126.         for (int i = 0; i < pText.length; i++) {
  127.             res[i] = (byte) (pText[i] ^ key[i % key.length]);
  128.         }
  129.  
  130.         return new String(res);
  131.     }
  132.  
  133.  
  134.     public static void cyclingEncode(String pText) {
  135.         System.out.println("Текст для шифрования:");
  136.         System.out.println(pText);
  137.  
  138.         System.out.println(">текст в зашифрованнои виде:");
  139.         String res = "";
  140.         for (int i = 0; i < pText.length();i++)
  141.         {
  142.             res += (char) ((int) pText.charAt(i) + 3);
  143.         }
  144.         System.out.println(res);
  145.  
  146.         System.out.println("\n>Расшифроанный текст:");
  147.         String un_res = "";
  148.         for (int i = 0; i < pText.length();i++)
  149.         {
  150.             un_res += (char) ((int) res.charAt(i) - 3);
  151.         }
  152.         System.out.println(un_res);
  153.     }
  154.  
  155.  
  156. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement