Advertisement
saleks28

pasoib9_server2

Jun 11th, 2020
361
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.77 KB | None | 0 0
  1. using System;
  2. using System.Text;
  3. using System.Net;
  4. using System.Net.Sockets;
  5. using System.Security.Cryptography;
  6. using System.Security.Permissions;
  7. using System.Security.Cryptography.Pkcs;
  8.  
  9. using System.Security.Cryptography.X509Certificates;
  10.  
  11.  
  12. namespace PASOIB_server
  13. {
  14.     class Program
  15.     {
  16.         static void Main(string[] args)
  17.         {
  18.             Console.OutputEncoding = Encoding.UTF8;
  19.             Console.Write("Введите порт сервера: ");
  20.             int port = Int32.Parse(Console.ReadLine());
  21.             Console.Write("Введите IP-адрес сервера: ");
  22.             string ip = Console.ReadLine();
  23.  
  24.             IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse(ip), port);
  25.  
  26.             Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  27.             try
  28.             {
  29.                 listenSocket.Bind(ipPoint);
  30.                 listenSocket.Listen(10);
  31.                 Console.WriteLine("Сервер начал работу. Ожидание подключений....");
  32.  
  33.                 while (true)
  34.                 {
  35.                     Socket handler = listenSocket.Accept();
  36.                     Console.WriteLine("Клиент осуществил подключение!", Environment.NewLine);
  37.                     StringBuilder builder = new StringBuilder();
  38.                     int bytes = 0;
  39.                     byte[] data = new byte[2048];
  40.                     while (true)
  41.                     {
  42.                         bytes = handler.Receive(data);
  43.                         string flag = Encoding.Unicode.GetString(data, 0, bytes);
  44.                         if (String.Compare("message", flag) == 0)
  45.                         {
  46.                             do
  47.                             {
  48.                                 bytes = handler.Receive(data);
  49.                                 builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
  50.                             }
  51.                             while (handler.Available > 0);
  52.                             Console.WriteLine(DateTime.Now.ToShortTimeString() + ": " + builder.ToString());
  53.                             HashAlgorithm a = HashAlgorithm.Create("GOST3411");
  54.                             byte[] hash = new UTF8Encoding().GetBytes(builder.ToString());
  55.                             var unhashed = a.ComputeHash(hash);
  56.                             StringBuilder sb = new StringBuilder();
  57.                             foreach (var b in unhashed)
  58.                             {
  59.                                 sb.Append(b);
  60.                             }
  61.                             Console.WriteLine("Хэш сообщения: " + sb.ToString());
  62.                             builder.Clear();
  63.                         }
  64.                         else if (String.Compare("stop", flag) == 0)
  65.                         {
  66.                             Console.WriteLine("Клиент завершает работу!");
  67.                             handler.Shutdown(SocketShutdown.Both);
  68.                             handler.Close();
  69.                             break;
  70.                         }
  71.                         else if (String.Compare("sign", flag) == 0)
  72.                         {
  73.  
  74.                             bytes = handler.Receive(data);
  75.                             bool res = true;
  76.                             var cms = new SignedCms();
  77.                             cms.Decode(data);
  78.                             try
  79.                             {
  80.                                 foreach (var signer in cms.SignerInfos)
  81.                                 {
  82.                                     signer.CheckSignature(true);
  83.                                 }
  84.                             }
  85.                             catch (CryptographicException)
  86.                             {
  87.                                 res = false;
  88.                             }
  89.                             if (res == true)
  90.                             {
  91.                                 Console.WriteLine("Проверка цифровой подписи успешно прошла! Сообщение не было подменено");
  92.                                 var info = cms.SignerInfos[0];
  93.                                 var certificate = info.Certificate;
  94.                                 byte[] rawdata = certificate.RawData;
  95.                                 var msg = cms.ContentInfo.Content;
  96.                                 string result = new UnicodeEncoding().GetString(msg);
  97.                                 Console.WriteLine("Время получения: " + DateTime.Now.ToShortTimeString());
  98.                                 Console.WriteLine("Сообщение: " + result);
  99.                                 HashAlgorithm a = HashAlgorithm.Create("GOST3411");
  100.                                 byte[] hash = new UTF8Encoding().GetBytes(result);
  101.                                 var h = a.ComputeHash(hash);
  102.                                 StringBuilder sb = new StringBuilder();
  103.                                 foreach (var bb in h)
  104.                                 {
  105.                                     sb.Append(bb);
  106.                                 }
  107.                                 Console.WriteLine("Хэш сообщения: " + sb.ToString());
  108.                                 Console.WriteLine("Информация об используемом сертификате:");
  109.                                 Console.WriteLine("-----Является ли сертификат проверенным? {0}{1}", certificate.Verify(), Environment.NewLine);
  110.                                 Console.WriteLine("-----Версия сертификата: " + certificate.Version);
  111.                                 Console.WriteLine("-----Используемый алгоритм подписи {0}{1}", certificate.SignatureAlgorithm.FriendlyName, Environment.NewLine);
  112.                                 Console.WriteLine("-----Информация о центрe сертификации: " + certificate.Issuer);
  113.                                 Console.WriteLine("-----Действителен с: " + certificate.NotBefore);
  114.                                 Console.WriteLine("-----Действителен до: " + certificate.NotAfter);
  115.                                 Console.WriteLine("-----Серийный номер: " + certificate.SerialNumber);
  116.                             }
  117.                             else
  118.                             {
  119.                                 Console.WriteLine("Проверка цифровой подписи не прошла! Сообщение было подменено");
  120.                             }
  121.                         }
  122.                         else if (String.Compare("encrypt", flag) == 0)
  123.                         {
  124.                             byte[] data2 = new byte[2048];
  125.                             bytes = handler.Receive(data2);
  126.                             var cms2 = new EnvelopedCms();
  127.                             cms2.Decode(data2);
  128.                             cms2.Decrypt(cms2.RecipientInfos[0]);
  129.                             data = cms2.ContentInfo.Content;
  130.                             bool res = true;
  131.                             var cms = new SignedCms();
  132.                             cms.Decode(data);
  133.                             try
  134.                             {
  135.                                 foreach (var signer in cms.SignerInfos)
  136.                                 {
  137.                                     signer.CheckSignature(true);
  138.                                 }
  139.                             }
  140.                             catch (CryptographicException)
  141.                             {
  142.                                 res = false;
  143.                             }
  144.                             if (res == true)
  145.                             {
  146.                                 Console.WriteLine("Проверка цифровой подписи успешно прошла! Сообщение не было подменено");
  147.                                 var info = cms.SignerInfos[0];
  148.                                 var certificate = info.Certificate;
  149.                                 byte[] rawdata = certificate.RawData;
  150.                                 var msg = cms.ContentInfo.Content;
  151.                                 string result = new UnicodeEncoding().GetString(msg);
  152.                                 Console.WriteLine("Время получения: " + DateTime.Now.ToShortTimeString());
  153.                                 Console.WriteLine("Сообщение: " + result);
  154.                                 HashAlgorithm a = HashAlgorithm.Create("GOST3411");
  155.                                 byte[] hash = new UTF8Encoding().GetBytes(result);
  156.                                 var h = a.ComputeHash(hash);
  157.                                 StringBuilder sb = new StringBuilder();
  158.                                 foreach (var bb in h)
  159.                                 {
  160.                                     sb.Append(bb);
  161.                                 }
  162.                                 Console.WriteLine("Хэш сообщения: " + sb.ToString());
  163.                                 Console.WriteLine("Алгоритм шифрования: " + cms2.ContentEncryptionAlgorithm.Oid.FriendlyName);
  164.                             }
  165.                             else
  166.                             {
  167.                                 Console.WriteLine("Проверка цифровой подписи не прошла! Сообщение было подменено");
  168.                             }
  169.                         }
  170.                     }
  171.                 }
  172.             }
  173.             catch (Exception ex)
  174.             {
  175.                 Console.WriteLine(ex.Message);
  176.             }
  177.             Console.ReadKey();
  178.         }
  179.     }
  180. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement