Реализация алгоритма подписи по ГОСТ Р 34.10-2012 256 через Cryptographic Service Provider (CSP). Этот класс не наследуется.

Пространство имен:  CryptoPro.Sharpei
Сборка:  CryptoPro.Sharpei.Base (в CryptoPro.Sharpei.Base.dll)

Синтаксис

Visual Basic
<ComVisibleAttribute(True)> _
Public NotInheritable Class Gost3410_2012_256CryptoServiceProvider _
	Inherits Gost3410_2012_256 _
	Implements ICspAsymmetricAlgorithm
C#
[ComVisibleAttribute(true)]
public sealed class Gost3410_2012_256CryptoServiceProvider : Gost3410_2012_256, 
	ICspAsymmetricAlgorithm
Visual C++
[ComVisibleAttribute(true)]
public ref class Gost3410_2012_256CryptoServiceProvider sealed : public Gost3410_2012_256, 
	ICspAsymmetricAlgorithm
JavaScript
CryptoPro.Sharpei.Gost3410_2012_256CryptoServiceProvider = function();

Type.createClass(
	'CryptoPro.Sharpei.Gost3410_2012_256CryptoServiceProvider',
	CryptoPro.Sharpei.Gost3410_2012_256,
	ICspAsymmetricAlgorithm);

Заметки

Класс Gost3410_2012_256CryptoServiceProvider используется для создания цифровой подписи, формирования общего секрета (Shared Secret). Алгоритм использует секретный ключ длиной 256, и открытый ключ длиной 512 бит.

Примеры

Пример работы с Gost3410_2012_256CryptoServiceProvider.
C# Copy imageCopy Code
// Copyright (C) 2006-2012 Крипто-Про. Все права защищены.
//
// Этот файл содержит информацию, являющуюся
// собственностью компании Крипто-Про.
// 
// Любая часть этого файла не может быть скопирована,
// исправлена, переведена на другие языки,
// локализована или модифицирована любым способом,
// откомпилирована, передана по сети с или на
// любую компьютерную систему без предварительного
// заключения соглашения с компанией Крипто-Про.
// 
// Программный код, содержащийся в этом файле, предназначен
// исключительно для целей обучения и не может быть использован
// для защиты информации.
// 
// Компания Крипто-Про не несет никакой
// ответственности за функционирование этого кода.

// Пример создания и проверки подписи.
//
// Данный пример подписывает значение хэш на алгоритме 
// ГОСТ Р 34.10-2012 256 на случайном ключе, проверяет правильность 
// подписи и выводит результат. 

using System;
using System.Security.Cryptography;

using CryptoPro.Sharpei;

namespace Samples.MySamples
{
    class Gost3410_2012_256CSPSample
    {
        [STAThread]
        static void Main(string[] args)
        {
            try
            {
                //Создаем новый Гост-34.10 CSP.
                Gost3410_2012_256CryptoServiceProvider Gost = new Gost3410_2012_256CryptoServiceProvider();

                //32-х битное значение хэш для подписи.
                byte[] HashValue = { 59, 4, 248, 102, 77, 97, 142, 201, 
                                    210, 12, 224, 93, 25, 41, 100, 197, 
                                    213, 134, 130, 135, 0, 0, 0, 0,
                                    0, 0, 0, 0, 0, 0, 0, 0};

                //Подписываем значение хэш.
                byte[] SignedHashValue = GostSignHash(HashValue, Gost, "Gost3411_2012_256");

                //Проверяем правильность подписи и выводим результат.
                bool b = GostVerifyHash(HashValue, SignedHashValue, Gost, "Gost3411_2012_256");
                if (b)
                {
                    Console.WriteLine("Подпись вычислена верно.");
                }
                else
                {
                    Console.WriteLine("Подпись вычислена неверно.");
                }
            }
            catch (ArgumentNullException e)
            {
                Console.WriteLine(e.Message);
            }
        }

        static byte[] GostSignHash(byte[] HashToSign, Gost3410_2012_256CryptoServiceProvider key, string HashAlg)
        {
            try
            {
                //Создаем форматтер подписи с закрытым ключом из переданного 
                //функции криптопровайдера.
                Gost2012_256SignatureFormatter Formatter = new Gost2012_256SignatureFormatter(
                    (Gost3410_2012_256CryptoServiceProvider)key);

                //Устанавливаем хэш-алгоритм.
                Formatter.SetHashAlgorithm(HashAlg);

                //Создаем подпись для HashValue и возвращаем ее.
                return Formatter.CreateSignature(HashToSign);
            }
            catch (CryptographicException e)
            {
                Console.WriteLine(e.Message);
                return null;
            }
        }

        static bool GostVerifyHash(byte[] HashValue, byte[] SignedHashValue, AsymmetricAlgorithm key, string HashAlg)
        {
            try
            {
                //Создаем форматтер подписи с закрытым ключом из переданного 
                //функции криптопровайдера.
                Gost2012_256SignatureDeformatter Deformatter = new Gost2012_256SignatureDeformatter(key);

                //Устанавливаем хэш-алгоритм.
                Deformatter.SetHashAlgorithm(HashAlg);

                //Проверяем подпись и возвращаем результат. 
                return Deformatter.VerifySignature(HashValue, SignedHashValue);
            }
            catch (CryptographicException e)
            {
                Console.WriteLine(e.Message);
                return false;
            }
        }
    }
}

Иерархия наследования

System..::..Object
  AsymmetricAlgorithm
    CryptoPro.Sharpei..::..Gost3410_2012_256
      CryptoPro.Sharpei..::..Gost3410_2012_256CryptoServiceProvider

Потокобезопасность

Любые открытые члены этого типа, объявленные как static (Shared в Visual Basic), являются потокобезопасными. Потокобезопасность членов экземпляров не гарантирована.

Версии CSP:

КриптоПро CSP 2.0, КриптоПро CSP 3.0, КриптоПро CSP 3.6

См. также: