Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Text;
- using System.Net;
- using System.Net.Sockets;
- using System.Security.Cryptography;
- using System.Security.Permissions;
- using System.Security.Cryptography.Pkcs;
- using System.Security.Cryptography.X509Certificates;
- namespace PASOIB_server
- {
- class Program
- {
- static void Main(string[] args)
- {
- Console.OutputEncoding = Encoding.UTF8;
- Console.Write("Введите порт сервера: ");
- string port_str = Console.ReadLine();
- int port = Int32.Parse(port_str);
- Console.Write("Введите IP-адрес сервера: ");
- string ip = Console.ReadLine();
- IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse(ip), port);
- Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- try
- {
- listenSocket.Bind(ipPoint);
- listenSocket.Listen(10);
- Console.WriteLine("Сервер начинает работу. Ожидание подключений....");
- while (true)
- {
- Socket handler = listenSocket.Accept();
- Console.WriteLine("Клиент осуществил подключение!", Environment.NewLine);
- StringBuilder builder = new StringBuilder();
- int bytes = 0;
- byte[] data = new byte[2048];
- while (true)
- {
- bytes = handler.Receive(data);
- string flag = Encoding.Unicode.GetString(data, 0, bytes);
- if (String.Compare("message", flag) == 0)
- {
- do
- {
- bytes = handler.Receive(data);
- builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
- }
- while (handler.Available > 0);
- Console.WriteLine(DateTime.Now.ToShortTimeString() + ": " + builder.ToString());
- HashAlgorithm a = HashAlgorithm.Create("GOST3411");
- byte[] hash = new UTF8Encoding().GetBytes(builder.ToString());
- var result = a.ComputeHash(hash);
- StringBuilder sb = new StringBuilder();
- foreach (var b in result)
- {
- sb.Append(b);
- }
- Console.WriteLine("Хэш сообщения: " + sb.ToString());
- builder.Clear();
- }
- else if (String.Compare("stop", flag) == 0)
- {
- Console.WriteLine("Клиент завершает работу!");
- handler.Shutdown(SocketShutdown.Both);
- handler.Close();
- break;
- }
- else if (String.Compare("sign", flag) == 0)
- {
- bytes = handler.Receive(data);
- bool res = true;
- var cms = new SignedCms();
- cms.Decode(data);
- try
- {
- foreach (var signer in cms.SignerInfos)
- {
- signer.CheckSignature(true);
- }
- }
- catch (CryptographicException)
- {
- res = false;
- }
- if (res == true)
- {
- Console.WriteLine("Проверка цифровой подписи успешно прошла! Сообщение не было подменено");
- var info = cms.SignerInfos[0];
- var certificate = info.Certificate;
- byte[] rawdata = certificate.RawData;
- var msg = cms.ContentInfo.Content;
- string result = new UnicodeEncoding().GetString(msg);
- Console.WriteLine("Время получения: " + DateTime.Now.ToShortTimeString());
- Console.WriteLine("Сообщение: " + result);
- HashAlgorithm a = HashAlgorithm.Create("GOST3411");
- byte[] hash = new UTF8Encoding().GetBytes(result);
- var h = a.ComputeHash(hash);
- StringBuilder sb = new StringBuilder();
- foreach (var bb in h)
- {
- sb.Append(bb);
- }
- Console.WriteLine("Хэш сообщения: " + sb.ToString());
- Console.WriteLine("Информация об используемом сертификате:");
- Console.WriteLine("-----Является ли сертификат проверенным? {0}{1}", certificate.Verify(), Environment.NewLine);
- Console.WriteLine("-----Версия сертификата: " + certificate.Version);
- Console.WriteLine("-----Используемый алгоритм подписи {0}{1}", certificate.SignatureAlgorithm.FriendlyName, Environment.NewLine);
- Console.WriteLine("-----Информация о центрe сертификации: " + certificate.Issuer);
- Console.WriteLine("-----Действителен с: " + certificate.NotBefore);
- Console.WriteLine("-----Действителен до: " + certificate.NotAfter);
- Console.WriteLine("-----Серийный номер: " + certificate.SerialNumber);
- }
- else
- {
- Console.WriteLine("Проверка цифровой подписи не прошла! Сообщение было подменено");
- }
- }
- else if (String.Compare("encrypt", flag) == 0)
- {
- byte[] data2 = new byte[2048];
- bytes = handler.Receive(data2);
- var cms2 = new EnvelopedCms();
- cms2.Decode(data2);
- cms2.Decrypt(cms2.RecipientInfos[0]);
- data = cms2.ContentInfo.Content;
- bool res = true;
- var cms = new SignedCms();
- cms.Decode(data);
- try
- {
- foreach (var signer in cms.SignerInfos)
- {
- signer.CheckSignature(true);
- }
- }
- catch (CryptographicException)
- {
- res = false;
- }
- if (res == true)
- {
- Console.WriteLine("Проверка цифровой подписи успешно прошла! Сообщение не было подменено");
- var info = cms.SignerInfos[0];
- var certificate = info.Certificate;
- byte[] rawdata = certificate.RawData;
- var msg = cms.ContentInfo.Content;
- string result = new UnicodeEncoding().GetString(msg);
- Console.WriteLine("Время получения: " + DateTime.Now.ToShortTimeString());
- Console.WriteLine("Сообщение: " + result);
- HashAlgorithm a = HashAlgorithm.Create("GOST3411");
- byte[] hash = new UTF8Encoding().GetBytes(result);
- var h = a.ComputeHash(hash);
- StringBuilder sb = new StringBuilder();
- foreach (var bb in h)
- {
- sb.Append(bb);
- }
- Console.WriteLine("Хэш сообщения: " + sb.ToString());
- Console.WriteLine("Алгоритм шифрования: " + cms2.ContentEncryptionAlgorithm.Oid.FriendlyName);
- }
- else
- {
- Console.WriteLine("Проверка цифровой подписи не прошла! Сообщение было подменено");
- }
- }
- }
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
- Console.ReadKey();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement