Advertisement
Guest User

Untitled

a guest
Nov 27th, 2014
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.67 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.         int[] result = new int[key_arr.length];
  71.         for (int i = 0; i < key_arr.length; i++) {
  72.             int hex = Integer.parseInt(encrypted_arr[i], 16);
  73.             int k = Integer.parseInt(key_arr[i], 16);
  74.             result[i] = hex ^ k;
  75.         }
  76.  
  77.         System.out.println("\nРезультат дешифровки с помощью случайного ключа:");
  78.         for (int i : result) {
  79.             System.out.print((char) i);
  80.         }
  81.     }
  82.  
  83.     public static String randomHex(int length)
  84.     {
  85.         Random rand = new Random();
  86.         if(length < 3)
  87.             return Integer.toHexString(rand.nextInt(256)).toUpperCase();
  88.         return Integer.toHexString(rand.nextInt(3840) + 256).toUpperCase();
  89.     }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement