/// <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); }
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); } }