Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.77 KB | None | 0 0
  1. using System;
  2. using System.IO;
  3.  
  4. namespace Task04_1
  5. {
  6.     class Program
  7.     {
  8.         static char sep = Path.DirectorySeparatorChar;//Разделительный символ.
  9.         static Random rnd = new Random();//Генератор случайных чисел.
  10.  
  11.  
  12.  
  13.         /// <summary>
  14.         /// Метод, шифрующий строку str с заданным ключом key.
  15.         /// </summary>
  16.         /// <param name="str">Строка, которую необходимо зашифровать.</param>
  17.         /// <param name="key">Ключ шифрования.</param>
  18.         /// <param name="result">Переменная для сохранения зашифрованной строки.</param>
  19.         static void Encrypt(string str, ushort key, out string result)
  20.         {
  21.             result = "";
  22.             for (uint i = 0; i < str.Length; i++) result += (char)(str[(int)i] ^ key);
  23.         }
  24.  
  25.         static void Main()
  26.         {
  27.             do
  28.             {
  29.                 Console.WriteLine("Введите строку, которую хотите зашифровать: ");
  30.                 string inputStr = Console.ReadLine();//Считываем строку для шифрованиия.
  31.  
  32.                 ushort key = default;//Ключ шифрования, получаемый случайно или из файла.
  33.                 byte[] binaryKey;//Массив для ввода ключа из бинарного файла.
  34.  
  35.                 string filePath = $"..{sep}..{sep}..{sep}key.bin";//Имя файла.
  36.  
  37.                 if (!File.Exists(filePath))
  38.                 {
  39.                     key = (ushort)rnd.Next(); //Создаём случайный ключ, если файла не существует.
  40.  
  41.                     Encrypt(inputStr, key, out var result); //Шифруем строку inputStr.
  42.                     Console.WriteLine(result); //Выводим зашифрованную строку на консоль.
  43.                 }
  44.  
  45.                 else
  46.                 { //Проверка файла на сущестование.
  47.  
  48.                     try
  49.                     { //Пробуем считать ключ из бинарного файла.
  50.                         binaryKey = File.ReadAllBytes(filePath);
  51.                         key = BitConverter.ToUInt16(binaryKey, 0);
  52.                     }
  53.                     catch (IOException)
  54.                     {
  55.                         Console.WriteLine($"Ошибка чтения ключа из файла.");
  56.                     }
  57.                     catch (System.Security.SecurityException ex)
  58.                     {
  59.                         Console.WriteLine($"Произошла ошибка безопасности: {ex.Message}");
  60.                     }
  61.                     catch (Exception ex)
  62.                     {
  63.                         Console.WriteLine($"Что-то пошло не так: {ex.Message}");
  64.                     }
  65.                 }
  66.  
  67.                 /*  else key = (ushort)rnd.Next(); //Создаём случайный ключ, если файла не существует.
  68.  
  69.                   Encrypt(inputStr, key, out var result); //Шифруем строку inputStr.
  70.                   Console.WriteLine(result); //Выводим зашифрованную строку на консоль. */
  71.  
  72.                 Console.WriteLine("Программа завершила выполнение.\n" +
  73.                     "Для закрытия программы нажмите \"Escape\"\n" +
  74.                     "Для продолжения – любую другую клавишу.");
  75.             } while (Console.ReadKey().Key != ConsoleKey.Escape);
  76.         }//Main()
  77.     }//Program
  78. }//Task04_1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement