Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package Lab3;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.util.Random;
- /**
- * Лабораторная работа №3
- * Информационная безопасность
- * Гарифуллин Аскар
- */
- public class App {
- public static void main(String[] args) throws IOException {
- // Исходная строка
- BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
- System.out.println("Исходная строка:");
- String source = reader.readLine();
- // Преобразование исходной строки в шестнадцатиричный код
- StringBuilder stringBuilder = new StringBuilder();
- char[] arr = source.toCharArray();
- for (char c : arr) {
- stringBuilder.append(Integer.toHexString((int) c).toUpperCase()).append(" ");
- }
- String source_hex = stringBuilder.toString().trim();
- System.out.println("\nИсходная строка в hex-формате:");
- System.out.println(source_hex);
- // Генерация ключа
- String[] source_hex_arr = source_hex.split(" ");
- stringBuilder = new StringBuilder();
- for (int i = 0; i < source.length(); i++) {
- stringBuilder.append(randomHex(source_hex_arr[i].length())).append(" ");
- }
- String key = stringBuilder.toString().trim();
- System.out.println("\nСлучайно сгенерированная строка-ключ:");
- System.out.println(key);
- // Наложение шифра и получение зашифрованного сообщения
- String[] key_arr = key.split(" ");
- stringBuilder = new StringBuilder();
- for (int i = 0; i < source_hex_arr.length; i++) {
- int hex = Integer.parseInt(source_hex_arr[i], 16);
- int k = Integer.parseInt(key_arr[i], 16);
- stringBuilder.append(Integer.toHexString(hex ^ k).toUpperCase()).append(" ");
- }
- String encrypted = stringBuilder.toString();
- System.out.println("\nЗашифрованное сообщение:");
- System.out.println(encrypted);
- // Дешифровка
- // Генерация ключа
- String[] encrypted_arr = encrypted.split(" ");
- /*stringBuilder = new StringBuilder();
- for (int i = 0; i < source.length(); i++) {
- stringBuilder.append(randomHex(encrypted_arr[i].length())).append(" ");
- }
- key = stringBuilder.toString().trim();*/
- System.out.println("\nДешифровка");
- System.out.println("Получен случайный ключ:");
- System.out.println(key);
- // Наложение ключа на шифр с целью дешифровки сообщения
- key_arr = key.split(" ");
- stringBuilder = new StringBuilder();
- int[] result = new int[key_arr.length];
- for (int i = 0; i < key_arr.length; i++) {
- int hex = Integer.parseInt(encrypted_arr[i], 16);
- int k = Integer.parseInt(key_arr[i], 16);
- result[i] = hex ^ k;
- }
- System.out.println("\nРезультат дешифровки с помощью случайного ключа:");
- for (int i : result) {
- stringBuilder.append((char) i);
- }
- String output = stringBuilder.toString();
- System.out.println(output);
- System.out.println("\nСтрока №2");
- String input = reader.readLine();
- // Преобразование исходной строки в шестнадцатиричный код
- stringBuilder = new StringBuilder();
- arr = input.toCharArray();
- for (char c : arr) {
- stringBuilder.append(Integer.toHexString((int) c).toUpperCase()).append(" ");
- }
- String input_hex = stringBuilder.toString().trim();
- System.out.println("\nИсходная строка в hex-формате:");
- System.out.println(input_hex);
- // Наложение одного сообщения на другое
- String[] input_hex_arr = input_hex.split(" ");
- encrypted_arr = encrypted.split(" ");
- stringBuilder = new StringBuilder();
- for (int i = 0; i < input_hex_arr.length; i++) {
- int hex = Integer.parseInt(encrypted_arr[i], 16);
- int k = Integer.parseInt(input_hex_arr[i], 16);
- stringBuilder.append(Integer.toHexString(hex ^ k).toUpperCase()).append(" ");
- }
- System.out.println("\nПолучен ключ:");
- System.out.println(stringBuilder.toString());
- }
- public static String randomHex(int length)
- {
- Random rand = new Random();
- if(length < 3)
- return Integer.toHexString(rand.nextInt(256)).toUpperCase();
- return Integer.toHexString(rand.nextInt(3840) + 256).toUpperCase();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement