Advertisement
Guest User

Untitled

a guest
Nov 27th, 2014
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.07 KB | None | 0 0
  1. package Lab3;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.util.Random;
  7.  
  8. /**
  9.  * Лабораторная работа №3
  10.  * Информационная безопасность
  11.  * Гарифуллин Аскар
  12.  */
  13. public class App {
  14.     public static void main(String[] args) throws IOException {
  15.         // Исходная строка
  16.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  17.         System.out.println("Исходная строка:");
  18.         String source = reader.readLine();
  19.  
  20.         // Преобразование исходной строки в шестнадцатиричный код
  21.         StringBuilder stringBuilder = new StringBuilder();
  22.         char[] arr = source.toCharArray();
  23.         for (char c : arr) {
  24.             stringBuilder.append(Integer.toHexString((int) c).toUpperCase()).append(" ");
  25.         }
  26.         String source_hex = stringBuilder.toString().trim();
  27.  
  28.         System.out.println("\nИсходная строка в hex-формате:");
  29.         System.out.println(source_hex);
  30.  
  31.         // Генерация ключа
  32.         String[] source_hex_arr = source_hex.split(" ");
  33.         stringBuilder = new StringBuilder();
  34.         for (int i = 0; i < source.length(); i++) {
  35.             stringBuilder.append(randomHex(source_hex_arr[i].length())).append(" ");
  36.         }
  37.         String key = stringBuilder.toString().trim();
  38.  
  39.         System.out.println("\nСлучайно сгенерированная строка-ключ:");
  40.         System.out.println(key);
  41.  
  42.         // Наложение шифра и получение зашифрованного сообщения
  43.         String[] key_arr = key.split(" ");
  44.  
  45.         stringBuilder = new StringBuilder();
  46.         for (int i = 0; i < source_hex_arr.length; i++) {
  47.             int hex = Integer.parseInt(source_hex_arr[i], 16);
  48.             int k = Integer.parseInt(key_arr[i], 16);
  49.             stringBuilder.append(Integer.toHexString(hex ^ k).toUpperCase()).append(" ");
  50.         }
  51.  
  52.         String encrypted = stringBuilder.toString();
  53.         System.out.println("\nЗашифрованное сообщение:");
  54.         System.out.println(encrypted);
  55.  
  56.         // Дешифровка
  57.         // Генерация ключа
  58.         String[] encrypted_arr = encrypted.split(" ");
  59.         /*stringBuilder = new StringBuilder();
  60.         for (int i = 0; i < source.length(); i++) {
  61.             stringBuilder.append(randomHex(encrypted_arr[i].length())).append(" ");
  62.         }
  63.         key = stringBuilder.toString().trim();*/
  64.         System.out.println("\nДешифровка");
  65.         System.out.println("Получен случайный ключ:");
  66.         System.out.println(key);
  67.  
  68.         // Наложение ключа на шифр с целью дешифровки сообщения
  69.         key_arr = key.split(" ");
  70.         stringBuilder = new StringBuilder();
  71.         int[] result = new int[key_arr.length];
  72.         for (int i = 0; i < key_arr.length; i++) {
  73.             int hex = Integer.parseInt(encrypted_arr[i], 16);
  74.             int k = Integer.parseInt(key_arr[i], 16);
  75.             result[i] = hex ^ k;
  76.         }
  77.  
  78.         System.out.println("\nРезультат дешифровки с помощью случайного ключа:");
  79.         for (int i : result) {
  80.             stringBuilder.append((char) i);
  81.         }
  82.         String output = stringBuilder.toString();
  83.         System.out.println(output);
  84.        
  85.         System.out.println("\nСтрока №2");
  86.         String input = reader.readLine();
  87.        
  88.         // Преобразование исходной строки в шестнадцатиричный код
  89.         stringBuilder = new StringBuilder();
  90.         arr = input.toCharArray();
  91.         for (char c : arr) {
  92.             stringBuilder.append(Integer.toHexString((int) c).toUpperCase()).append(" ");
  93.         }
  94.         String input_hex = stringBuilder.toString().trim();
  95.  
  96.         System.out.println("\nИсходная строка в hex-формате:");
  97.         System.out.println(input_hex);
  98.        
  99.         // Наложение одного сообщения на другое
  100.         String[] input_hex_arr = input_hex.split(" ");
  101.         encrypted_arr = encrypted.split(" ");
  102.         stringBuilder = new StringBuilder();
  103.         for (int i = 0; i < input_hex_arr.length; i++) {
  104.             int hex = Integer.parseInt(encrypted_arr[i], 16);
  105.             int k = Integer.parseInt(input_hex_arr[i], 16);
  106.             stringBuilder.append(Integer.toHexString(hex ^ k).toUpperCase()).append(" ");
  107.         }
  108.  
  109.         System.out.println("\nПолучен ключ:");
  110.         System.out.println(stringBuilder.toString());
  111.     }
  112.  
  113.     public static String randomHex(int length)
  114.     {
  115.         Random rand = new Random();
  116.         if(length < 3)
  117.             return Integer.toHexString(rand.nextInt(256)).toUpperCase();
  118.         return Integer.toHexString(rand.nextInt(3840) + 256).toUpperCase();
  119.     }
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement