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

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

    Использование PRF

    Выработка ключа.

     public void DeriveKey()
     {
        // byte[] label
        // byte[] seed
    
        // Инициализируем PRF на основе симметричного ключа
        // (в данном примере будет сгенерирован случайный).
        using (var key = new Gost28147CryptoServiceProvider())
        {
            using (PrfGost prf = new PrfGost3411_2012_256(
                        key,
                        label: label,
                        seed: seed))
            {
                // Получаем новый симметричный ключ.
                Gost28147 key = prf.DeriveKey();
            }
        }
     }
    

    Выработка последовательности байт.

    public void DeriveBytes()
    {
        // byte[] label
        // byte[] seed
    
        // Инициализируем PRF на основе симметричного ключа
        // (в данном примере будет сгенерирован случайный).
        using (var key = new Gost28147CryptoServiceProvider())
        {
            using (PrfGost prf = new PrfGost3411_2012_256(
                        key,
                        label: label,
                        seed : seed))
            {
                // Получаем 256 бит выхода PRF.
                byte[] array = prf.DeriveBytes();
            }
        }
    }
    

    Использование KdfTree

    public void Deversify()
    {
        // byte[] label
        // byte[] context
        
        // В конструктор может быть передан алгоритм ключа,
        // используемый в KdfTree [CALG_GR3412_2015_K,
        // CALG_GR3412_2015_M, CALG_G28147]. По умолчанию
        // используется CALG_GR3412_2015_K. Ключ будет 
        // сгенерирован случайно.
        //
        // Альтернативно можно передать существующий ключ через
        // KdfTree(IntPtr keyHandle, IntPtr providerHandle).
        // Передав хэндлы из объекта симметричного ключа
        // XXXCryptoServiceProvider.
        using (var provider = new KdfTree())
        {
            // Хотим получать провайдер ключа ГОСТ 34.12-2015 Магма.
            // Для получения провайдеров прочих алгоритмов ключа
            // необходимо использовать соответствующие методы
            // DiversifyXXX().
            using (var dprov = provider.Diversify3412_2015_M(
                label: label,
                context: context))
            {
                // Использование полученного провайдера dprov
                // диверсифицированного ключа. В примере 
                // просто проверяем oid.
                var oid = dprov.CipherOid;
                Assert.Equal(OID_CP_GOST_R3412_2015_M, oid);
            }
        }
    }
    

    Использование PBKDF

    public void TestGen3411_2012_256_34_12_2015_M()
    {
        // byte[] password
        // byte[] salt
    
        // В конструктор может быть передан алгоритм хэша,
        // используемый в PBKDF [CALG_PBKDF2_2012_256,
        // CALG_PBKDF2_2012_512]. По умолчанию
        // используется CALG_PBKDF2_2012_256.
        using (var provider = new PbKdf())
        {
            // Хотим получать провайдер ключа ГОСТ 34.12-2015 Магма.
            // Для получения провайдеров прочих алгоритмов ключа
            // необходимо использовать соответствующие методы
            // DiversifyXXX().
            using (var dprov = provider.Gen3412_2015_M(
                password: password,
                salt: salt))
            {
                // Использование полученного провайдера dprov
                // сгенерированного ключа. В примере 
                // просто проверяем oid.
                var oid = dprov.CipherOid;
                Assert.Equal(GostConstants.OID_CP_GOST_R3412_2015_M, oid);
            }
        }
    }
    
    В этом разделе
    Наверх Generated by DocFX