예제 #1
0
        /// <summary>
        /// Создает маркант с помошью KeyExchangeFormatter
        /// </summary>
        /// <param name="gost28147">Сессионный ключ</param>
        /// <param name="certFileName">Путь к файлу сертификата с открытым ключом получателя</param>
        /// <returns>Сгенерированный маркант</returns>
        public static Markant CreateMarkantWithKeyExchangeFormatter(Gost28147 gost28147, string certFileName)
        {
            // Разбираем сертификат получателя
            X509Certificate2 cert = new X509Certificate2(certFileName);

            if (!(cert.PublicKey.Key is Gost3410_2012_256 gost3410))
            {
                throw new CryptographicException("Not a GOST certificate");
            }

            //Создаем форматтер, шифрующий на ассиметричном ключе получателя
            Gost2012_256KeyExchangeFormatter formatter = new Gost2012_256KeyExchangeFormatter(gost3410);
            //GostKeyTransport - формат зашифрованной для безопасной передачи ключевой информации
            GostKeyTransport gostKeyTransport = ((Gost2012_256KeyExchangeFormatter)formatter).CreateKeyExchange(gost28147);

            //Формируем маркант
            Markant m = new Markant
            {
                Version    = 1,
                SessionKey = gostKeyTransport.Encode(),
                IV         = gost28147.IV
            };

            return(m);
        }
예제 #2
0
 public byte[] GetEncryptedSymKey()
 {
     try
     {
         symKey = new Gost28147CryptoServiceProvider();
         IV     = symKey.IV;
         Gost2012_256KeyExchangeFormatter Formatter = new Gost2012_256KeyExchangeFormatter(serverCert.PublicKey.Key);
         GostKeyTransport encKey  = Formatter.CreateKeyExchange(symKey);
         byte[]           bencKey = encKey.Encode();
         return(bencKey);
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
         return(null);
     }
 }