Реализация алгоритма подписи по ГОСТ Р 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 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
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