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