/// <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); } }
/// <summary> /// Формирование данных обмена, на основе симметричного /// ключа шифрования сообщения ГОСТ 28147. /// </summary> /// /// <param name="alg">Симметричный ключ ГОСТ 28147.</param> /// /// <returns>Зашифрованные данные для отправки стороне /// получателю.</returns> /// /// <argnull name="alg" /> public byte[] CreateKeyExchangeData(SymmetricAlgorithm alg) { GostKeyTransport transport = CreateKeyExchange(alg, CPUtils.DefaultKeyWrapMethods); return(transport.Encode()); }
/// <summary> /// Формирование данных обмена, на основе симметричного /// ключа шифрования сообщения ГОСТ 28147. /// </summary> /// /// <param name="alg">Симметричный ключ ГОСТ 28147.</param> /// <param name="wrapMethod">Алгоритм экпорта</param> /// <returns>Зашифрованные данные для отправки стороне /// получателю.</returns> /// /// <argnull name="alg" /> public byte[] CreateKeyExchangeData(SymmetricAlgorithm alg, GostKeyWrapMethod wrapMethod) { GostKeyTransport transport = CreateKeyExchange(alg, wrapMethod); return(transport.Encode()); }