· 5 years ago · Jul 01, 2020, 07:42 PM
1using System;
2using System.Threading;
3using System.Windows.Forms;
4
5public class XORCipher
6{
7 private string GetRepeatKey(string s, int n)
8 {
9 var r = s;
10 while (r.Length < n)
11 {
12 r += r;
13 }
14
15 return r.Substring(0, n);
16 }
17 private string Cipher(string text, string secretKey)
18 {
19 var currentKey = GetRepeatKey(secretKey, text.Length);
20 var res = string.Empty;
21 for (var i = 0; i < text.Length; i++)
22 {
23 res += ((char)(text[i] ^ currentKey[i])).ToString();
24 }
25
26 return res;
27 }
28 public string Encrypt(string plainText, string password)
29 => Cipher(plainText, password);
30 public string Decrypt(string encryptedText, string password)
31 => Cipher(encryptedText, password);
32}
33
34class Program
35{
36 static void Main(string[] args)
37 {
38 var x = new XORCipher();
39 while (true)
40 {
41 Console.Write("Введите текст сообщения: ");
42 var message = Console.ReadLine();
43 Console.Write("Введите пароль: ");
44 var pass = Console.ReadLine();
45 var encryptedMessageByPass = x.Encrypt(message, pass);
46 Console.WriteLine("Зашифрованное сообщение {0}", encryptedMessageByPass);
47 Console.WriteLine("Расшифрованное сообщение {0}", x.Decrypt(encryptedMessageByPass, pass));
48 Console.Write("Что скопировать? (encrypted/decrypted)");
49 var quest = Console.ReadLine();
50 if (quest == "encrypted")
51 {
52 try
53 {
54 Clipboard.SetText(encryptedMessageByPass);
55 Console.Write("Успешно скопировано в буфер обмена. Перезапуск программы через 3 секунды");
56 Thread.Sleep(3000);
57 Console.Clear();
58 }
59 catch (SystemException e)
60 {
61 Console.Write("Возникла неожиданная ошибка: {0}",e);
62 }
63 }
64 else if (quest == "decrypted")
65 {
66 Clipboard.SetText(x.Decrypt(encryptedMessageByPass, pass));
67 Console.Write("Успешно скопировано в буфер обмена. Перезапуск программы через 3 секунды");
68 Thread.Sleep(3000);
69 Console.Clear();
70 }
71 else
72 {
73 Console.Write("Указана неверная операция для команды! (Перезапуск программы через 3 секунды)");
74 Thread.Sleep(3000);
75 Console.Clear();
76 }
77 }
78 }
79}