Advertisement
saleks28

pasoib9_server

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