Вычисляет значение хэш для байтового массива и подписывает его.

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

Синтаксис

Visual Basic
Public Function SignData ( _
	buffer As Byte(), _
	hashAlg As Object _
) As Byte()
C#
public byte[] SignData(
	byte[] buffer,
	Object hashAlg
)
Visual C++
public:
array<unsigned char>^ SignData(
	array<unsigned char>^ buffer, 
	Object^ hashAlg
)
JavaScript
function signData(buffer, hashAlg);

Параметры

buffer
Type: array<System..::..Byte>[]()[][]
Данные, для которых вычисляется подпись.
hashAlg
Type: System..::..Object
Объект, реализующий алгоритм хэширования.

Возвращаемое значение

Подпись данных, выполненная по алгоритму ГОСТ Р 34.10.

Примеры

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

' Пример подписи и проверки подписи текстовой строки.
'
' Данный пример
' 1. Подписывает текстовую строку (в виде байтового массива) 
' на алгоритме ГОСТ Р 34.10-2001.
' 2. Проверяет правильность подписи и выводит результат.

Imports System

Imports CryptoPro.Sharpei

Class SignData1

    Shared Sub Main()
        Try

            ' Объект, реализующий алгоритм ГОСТ 3410.
            Dim Gost As Gost3410CryptoServiceProvider = New Gost3410CryptoServiceProvider()

            ' Данные для подписи.
            Dim Data As Byte() = New Byte() {59, 4, 248, 102, 77, 97, 142, 201, 21, _
                    12, 224, 93, 25, 41, 100, 197, 213, 134, 130, 135}

            'Объект, реализующий алгоритм хэширования ГОСТ 3411.
            Dim GostHash As Gost3411CryptoServiceProvider = New Gost3411CryptoServiceProvider()

            ' Подписываем данные:
            Dim SignedValue As Byte() = Gost.SignData(Data, GostHash)

            ' Проверяем правильность подписи и выводим результат.
            Dim b As Boolean = Gost.VerifyData(Data, GostHash, SignedValue)
            If (b) Then
                Console.WriteLine("Подпись верна.")
            Else
                Console.WriteLine("Подпись вычислена неверно.")
            End If
        Catch e As ArgumentNullException
            Console.WriteLine(e.Message)
        End Try
    End Sub
End Class
C# Copy imageCopy Code
// Copyright (C) 2006-2012 Крипто-Про. Все права защищены.
//
// Этот файл содержит информацию, являющуюся
// собственностью компании Крипто-Про.
// 
// Любая часть этого файла не может быть скопирована,
// исправлена, переведена на другие языки,
// локализована или модифицирована любым способом,
// откомпилирована, передана по сети с или на
// любую компьютерную систему без предварительного
// заключения соглашения с компанией Крипто-Про.
// 
// Программный код, содержащийся в этом файле, предназначен
// исключительно для целей обучения и не может быть использован
// для защиты информации.
// 
// Компания Крипто-Про не несет никакой
// ответственности за функционирование этого кода.

// Пример подписи и проверки подписи текстовой строки.
//
// Данный пример
// 1. Подписывает текстовую строку (в виде байтового массива) 
// на алгоритме ГОСТ Р 34.10-2001.
// 2. Проверяет правильность подписи и выводит результат.

using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;

using CryptoPro.Sharpei;

namespace Samples
{
    class SignData1
    {
        [STAThread]
        static void Main()
        {
            try
            {
                // Объект, реализующий алгоритм ГОСТ 3410.
                Gost3410CryptoServiceProvider Gost = new Gost3410CryptoServiceProvider();

                // Данные для подписи.
                byte[] Data = { 59, 4, 248, 102, 77, 97, 142, 201, 21, 
                    12, 224, 93, 25, 41, 100, 197, 213, 134, 130, 135 };

                // Объект, реализующий алгоритм хэширования ГОСТ 3411.
                Gost3411CryptoServiceProvider GostHash = new Gost3411CryptoServiceProvider();

                // Подписываем данные:
                byte[] SignedValue = Gost.SignData(Data, GostHash);

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

Примеры

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

' Пример подписи и проверки подписи файла.
' 
' Данный пример:
' 1.Вычисляет значение хэш для файла Test.txt на алгоритме
' ГОСТ Р 34.11.
' 2.Подписывает этот хэш на алгоритме ГОСТ Р 34.10-2001 
' и выводит значение подписи.
' 3.Проверяет правильность подписи.
' 
' Перед запуском данного примера необходимо создать файл
' "c:\temp\Test.txt"

Imports System
Imports System.IO

Imports CryptoPro.Sharpei

Module SignFile1

    Sub Main()
        Dim test As Gost3410 = Nothing
        If (test Is Nothing) Then
            Console.WriteLine("lalal")
        End If
        'Полное имя файла
        Dim path As New String("c:\temp\Test.txt")
        'Открываем на чтение
        Dim fs As New FileStream(path, FileMode.Open, FileAccess.Read)
        'Объект, реализующий алгоритм вычисления подписи 
        Dim Gost As New Gost3410CryptoServiceProvider()
        'Объект, реализующий алгоритм хэширования 
        Dim GostHash As New Gost3411CryptoServiceProvider()
        'Вычисляем хэш для потока данных
        Dim HashValue As Byte() = GostHash.ComputeHash(fs)
        'Вычисляем подпись для хэша и выводим результат
        Dim SignedData As Byte() = Gost.SignHash(HashValue, "1.2.643.2.2.9")
        Console.WriteLine("Значение подписи:")
        Dim i As Integer
        Do While (i < SignedData.Length)
            Console.Write("{0:X2}", SignedData(i))
            Console.Write("  ")
            i = i + 1
        Loop
        'Проверяем праввильность подписи и выводим результат.
        Dim b As Boolean
        b = Gost.VerifyHash(HashValue, "1.2.643.2.2.9", SignedData)
        Console.WriteLine()
        If b Then
            Console.WriteLine("Подпись верна")
        Else
            Console.WriteLine("Подпись не верна")
        End If

    End Sub 'Main

End Module

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

// Пример подписи и проверки подписи файла.
// 
// Данный пример:
// 1.Вычисляет значение хэш для файла Test.txt на алгоритме
// ГОСТ Р 34.11.
// 2.Подписывает этот хэш на алгоритме ГОСТ Р 34.10-2001 
// и выводит результат.
// 3.Проверяет правильность подписи.
// 
// Перед запуском данного примера необходимо создать файл
// "c:\temp\Test.txt"

using System;
using System.IO;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;

using CryptoPro.Sharpei;

namespace Samples
{
    class SignFile1
    {
        [STAThread]
        static void Main()
        {
            // Полное имя файла.
            string path = @"c:\temp\Test.txt";
            // Открываем на чтение.
            FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.None);

            // Объект, реализующий алгоритм вычисления подписи.
            Gost3410CryptoServiceProvider Gost = new Gost3410CryptoServiceProvider();
            // Объект, реализующий алгоритм хэширования.
            Gost3411CryptoServiceProvider GostHash = new Gost3411CryptoServiceProvider();

            // Подсчитываем значение хэш для потока данных.
            byte[] HashValue = GostHash.ComputeHash(fs);

            // Считаем подпись для хэш и выводим результат:
            byte[] SignedData = Gost.SignHash(HashValue);
            Console.WriteLine("Подпись:");
            for (int i = 0; i < SignedData.Length; i++)
                Console.Write("{0:X2}", SignedData[i] + "  ");

            bool b;
            // Проверям правильность подписи для значения хэш и выводим результат.
            b = Gost.VerifyHash(HashValue, SignedData);
            if (b)
            {
                Console.WriteLine("Подпись верна");
            }
            else
            {
                Console.WriteLine("Подпись не верна");
            }
        }
    }
}

Разрешения

РазрешениеОписание
KeyContainerPermissionДля открытия существующего контейнера. Связанные перечисления: Open. Действия по обеспечению безопасности: Demand .
KeyContainerPermissionДля создания контейнера с заданным (не случайным именем). Связанные перечисления: Create. Действия по обеспечению безопасности: Demand .
KeyContainerPermissionДля подписи на не случайном контейнере. Связанные перечисления: Sign. Действия по обеспечению безопасности: Demand .

Исключения

ИсключениеУсловие
CryptographicExceptionhashAlg не является алгоритмом хэширования по ГОСТ Р 34.11.

Версии CSP:

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

См. также: