Advertisement
VastMind

Untitled

May 25th, 2018
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement