Реализация алгоритма подписи по ГОСТ Р 34.10 через
Cryptographic Service Provider (CSP).
Этот класс не наследуется.
Пространство имен:
CryptoPro.SharpeiСборка: CryptoPro.Sharpei.Base (в CryptoPro.Sharpei.Base.dll)
Синтаксис
Visual Basic |
---|
<ComVisibleAttribute(True)> _ Public NotInheritable Class Gost3410CryptoServiceProvider _ Inherits Gost3410 _ Implements ICspAsymmetricAlgorithm |
C# |
---|
[ComVisibleAttribute(true)] public sealed class Gost3410CryptoServiceProvider : Gost3410, ICspAsymmetricAlgorithm |
Visual C++ |
---|
[ComVisibleAttribute(true)] public ref class Gost3410CryptoServiceProvider sealed : public Gost3410, ICspAsymmetricAlgorithm |
JavaScript |
---|
CryptoPro.Sharpei.Gost3410CryptoServiceProvider = function(); Type.createClass( 'CryptoPro.Sharpei.Gost3410CryptoServiceProvider', CryptoPro.Sharpei.Gost3410, ICspAsymmetricAlgorithm); |
Заметки
Класс Gost3410CryptoServiceProvider используется для создания цифровой подписи, формирования общего секрета (Shared Secret). Алгоритм использует секретный ключ длиной 256, и открытый ключ длиной 512 бит.
Примеры
Пример работы с
Gost3410CryptoServiceProvider.
Visual Basic | ![]() |
---|---|
' Copyright (C) 2006-2012 Крипто-Про. Все права защищены. ' ' Этот файл содержит информацию, являющуюся ' собственностью компании Крипто Про. ' ' Любая часть этого файла не может быть скопирована, ' исправлена, переведена на другие языки, ' локализована или модифицирована любым способом, ' откомпилирована, передана по сети с или на ' любую компьютерную систему без предварительного ' заключения соглашения с компанией Крипто Про. ' ' Программный код, содержащийся в этом файле, предназначен ' исключительно для целей обучения и не может быть использован ' для защиты информации. ' ' Компания Крипто-Про не несет никакой ' ответственности за функционирование этого кода. ' Пример шифрования файла. ' ' Данный пример шифрует содержимое файла на алгоритме ГОСТ-28147 ' со случайными ключом и синхропосылкой и сохраняет результат. ' ' В командной строке примеру необходимо передать имена входного ' и выходного файлов. Imports System Imports System.IO Imports System.Security.Cryptography Imports CryptoPro.Sharpei Class Gost3410CSPSample Shared Sub Main(ByVal args() As String) If (args.Length < 2) Then Console.WriteLine(GetType(Gost3410CSPSample).FullName + " <in-file> <out-file>") Return End If ' Создаем потоки для входного и выходного файлов. Dim bin As Byte() = New Byte(100) {} 'Промежуточный буфер. Dim rdlen As Long = 0 'Общее число записанных байт. Dim fin As FileStream = New FileStream(args(0), FileMode.Open, FileAccess.Read) Dim fout As FileStream = New FileStream(args(1), FileMode.OpenOrCreate, FileAccess.Write) fout.SetLength(0) Dim totlen As Long = fin.Length 'Общий размер входного файла. Dim len As Integer 'Число считанных за один раз байт. ' Создаем CSP, генерируем ключ и синхропосылку. Dim gost As Gost28147 = New Gost28147CryptoServiceProvider() gost.GenerateIV() gost.GenerateKey() ' Создаем криптопоток для записи Dim encStream As CryptoStream = New CryptoStream(fout, gost.CreateEncryptor(), _ CryptoStreamMode.Write) Console.WriteLine("Шифрование...") 'Читаем из входного файла, шифруем и пишем в выходной. Do While (rdlen < totlen) len = fin.Read(bin, 0, 100) encStream.Write(bin, 0, len) rdlen = rdlen + len Console.WriteLine("обработано {0} байтов", rdlen) Loop encStream.Close() fout.Close() fin.Close() End Sub End Class |
C# | ![]() |
---|---|
// Copyright (C) 2006-2012 Крипто-Про. Все права защищены. // // Этот файл содержит информацию, являющуюся // собственностью компании Крипто-Про. // // Любая часть этого файла не может быть скопирована, // исправлена, переведена на другие языки, // локализована или модифицирована любым способом, // откомпилирована, передана по сети с или на // любую компьютерную систему без предварительного // заключения соглашения с компанией Крипто-Про. // // Программный код, содержащийся в этом файле, предназначен // исключительно для целей обучения и не может быть использован // для защиты информации. // // Компания Крипто-Про не несет никакой // ответственности за функционирование этого кода. // Пример создания и проверки подписи. // // Данный пример подписывает значение хэш на алгоритме // ГОСТ Р 34.10-2001 на случайном ключе, проверяет правильность // подписи и выводит результат. using System; using System.Security.Cryptography; using CryptoPro.Sharpei; namespace Samples.MySamples { class Gost3410CSPSample { [STAThread] static void Main(string[] args) { try { //Создаем новый Гост-34.10 CSP. Gost3410CryptoServiceProvider Gost = new Gost3410CryptoServiceProvider(); //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"); //Проверяем правильность подписи и выводим результат. bool b = GostVerifyHash(HashValue, SignedHashValue, Gost, "Gost3411"); if (b) { Console.WriteLine("Подпись вычислена верно."); } else { Console.WriteLine("Подпись вычислена неверно."); } } catch (ArgumentNullException e) { Console.WriteLine(e.Message); } } static byte[] GostSignHash(byte[] HashToSign, Gost3410CryptoServiceProvider key, string HashAlg) { try { //Создаем форматтер подписи с закрытым ключом из переданного //функции криптопровайдера. GostSignatureFormatter Formatter = new GostSignatureFormatter((Gost3410CryptoServiceProvider)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 { //Создаем форматтер подписи с закрытым ключом из переданного //функции криптопровайдера. GostSignatureDeformatter Deformatter = new GostSignatureDeformatter(key); //Устанавливаем хэш-алгоритм. Deformatter.SetHashAlgorithm(HashAlg); //Проверяем подпись и возвращаем результат. return Deformatter.VerifySignature(HashValue, SignedHashValue); } catch (CryptographicException e) { Console.WriteLine(e.Message); return false; } } } } |
Иерархия наследования
System..::..Object
AsymmetricAlgorithm
CryptoPro.Sharpei..::..Gost3410
CryptoPro.Sharpei..::..Gost3410CryptoServiceProvider
AsymmetricAlgorithm
CryptoPro.Sharpei..::..Gost3410
CryptoPro.Sharpei..::..Gost3410CryptoServiceProvider
Потокобезопасность
Любые открытые члены этого типа, объявленные как static (Shared в Visual Basic), являются потокобезопасными. Потокобезопасность членов экземпляров не гарантирована.
Версии CSP:
КриптоПро CSP 2.0, КриптоПро CSP 3.0, КриптоПро CSP 3.6