КриптоПро .NET
Search Results for

    Показать/Скрыть содержание

    Ключевой транспорт, KeyWrap

    Symmetric KeyWrap

    var keyWrapMethod = GostKeyWrapMethod.CryptoProKeyWrap;
    using (Gost28147 gost = new Gost28147CryptoServiceProvider())
    {
        using (Gost28147 keyToWrap = new Gost28147CryptoServiceProvider())
        {
            var wrappedKey = gost.Wrap(keyToWrap, keyWrapMethod);
            var unwrappedKey = gost.Unwrap(wrappedKey, keyWrapMethod) as Gost28147;
            var iv = keyToWrap.IV;
        }
    }
    

    Asymmetric agree (DH)

    var gost = (Gost3410_2012_512CryptoServiceProvider)cert.PrivateKey;
    var gostRes = (Gost3410_2012_512CryptoServiceProvider)cert.PrivateKey;
    
    var gostPk = (Gost3410_2012_512CryptoServiceProvider)cert.PublicKey.Key;
    var gostResPk = (Gost3410_2012_512CryptoServiceProvider)cert.PublicKey.Key;
    
    var symmetric = new Gost28147CryptoServiceProvider();
    
    // set params, if needed
    gostPk.CipherOid = "1.2.643.7.1.2.5.1.1";
    gostResPk.CipherOid = "1.2.643.7.1.2.5.1.1";
    
    var agree = (GostSharedSecretCryptoServiceProvider)gost.CreateAgree(gostResPk.ExportParameters(false));
    byte[] wrappedKeyBytesArray = agree.Wrap(symmetric, GostKeyWrapMethod.CryptoProKeyWrap);
    
    var agreeRes = (GostSharedSecretCryptoServiceProvider)gostRes.CreateAgree(gostPk.ExportParameters(false));
    var key = agreeRes.Unwrap(wrappedKeyBytesArray, GostKeyWrapMethod.CryptoProKeyWrap);
    

    Asymmetric KeyExchange (key encryption)

    Отправитель:

    // Создаем случайный секретный ключ, который необходимо передать.
    Gost28147 key = new Gost28147CryptoServiceProvider();
    // Синхропосылка не входит в GostKeyTransport и должна
    // передаваться отдельно.
    IV = key.IV;
    
    // Создаем форматтер, шифрующий на асимметричном ключе получателя.
    GostKeyExchangeFormatter Formatter = new GostKeyExchangeFormatter(cert.PublicKey.Key as Gost3410_2012_512);
    // GostKeyTransport - формат зашифрованной для безопасной передачи
    // ключевой информации.
    GostKeyTransport encKey = Formatter.CreateKeyExchange(key);
    

    Получатель:

    // Деформаттер для ключей, зашифрованных на асимметричном ключе получателя.
    GostKeyExchangeDeformatter Deformatter = new GostKeyExchangeDeformatter(cert.PrivateKey);
    // Получаем ГОСТ-овый ключ из GostKeyTransport.
    GostKeyTransport transport = new GostKeyTransport();
    transport.Decode(encKey);
    Gost28147 decryptedKey = (Gost28147)Deformatter.DecryptKeyExchange(transport);
    // Устанавливаем синхропосылку.
    decryptedKey.IV = IV;
    
    Примечание

    см доп примеры в https://github.com/CryptoPro/corefx/issues/43

    В этом разделе
    Наверх Generated by DocFX