Статус: Новичок
Группы: Участники
Зарегистрирован: 09.10.2017(UTC) Сообщений: 4
|
Добрый день. Мне на вход приходит подписанный массив байт и сама подпись(отсоединенная). Нужно проверить подпись. У меня в системе установлен сертификат с PublicKey для проверки подписи. Варианты провайдеров, которыми осуществлялась подпись:
- CryptoPro2012_256 = "Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider"; - CryptoPro2012_512 = "Crypto-Pro GOST R 34.10-2012 Strong Cryptographic Service Provider"; - CryptoPro2001 = "Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider";
Подскажите куда копать, какие классы использовать для верификации подписи с указанием ключа(public key).
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 09.10.2017(UTC) Сообщений: 4
|
Наткнулся на пример, но в моем случае вылетает ошибка "Неправильный параметр набора ключей". В тестовом сертификате, который мне предоставили имеется только PublicKey. С IIS не работаю. Код:
var parameters = new CspParameters();
parameters.ProviderName = "Crypto-Pro GOST R 34.10-2012 Strong Cryptographic Service Provider";
parameters.ProviderType = 81;
// Объект, реализующий алгоритм ГОСТ 3410.
Gost3410_2012_512CryptoServiceProvider gost3410 = new Gost3410_2012_512CryptoServiceProvider(parameters);
var cert = GetCertificate(serialNumber);
gost3410.ContainerCertificate = cert;
// Данные для проверки подписи.
byte[] data = Encoding.GetEncoding(1251).GetBytes(doc.OuterXml);
// Объект, реализующий алгоритм хэширования ГОСТ 3411.
Gost3411_2012_512CryptoServiceProvider gostHash = new Gost3411_2012_512CryptoServiceProvider();
//Проверяем правильность подписи и выводим результат.
return gost3410.VerifyData(data, gostHash, sign);
Если закомментировать установку ProviderType, то выходит ошибка "Тип поставщика не соответствует зарегистрированному значению."; Если вообще убрать объявление CspParametrs, то ошибка "Набор ключей не определен". Kripto.PNG (16kb) загружен 10 раз(а). Studija.PNG (99kb) загружен 12 раз(а).
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 09.10.2017(UTC) Сообщений: 4
|
Дошел до такого варианта, ошибок нет, но подпись не проходит проверку. Код:
internal static bool VerifyCryptoSign(byte[] data, byte[] sign, string serialNumber)
{
// Получаем сертификат из хранилища по его серийному номеру
var cert = GetCertificate(serialNumber);
// Объект, реализующий алгоритм ГОСТ 3410.
Gost3410_2012_512CryptoServiceProvider gost3410 = (Gost3410_2012_512CryptoServiceProvider) cert.PublicKey.Key;
// Объект, реализующий алгоритм хэширования ГОСТ 3411.
Gost3411_2012_512CryptoServiceProvider gostHash = new Gost3411_2012_512CryptoServiceProvider();
//Проверяем правильность подписи и выводим результат.
bool result = gost3410.VerifyData(data, gostHash, sign);
return result;
}
Сравнил данные и подпись, что лежат в первоисточнике с теми, с которыми работаю я. И данные, и подпись совпадают. Уточнение - изначально файл подписывается с помощью С++. Отредактировано пользователем 10 октября 2017 г. 17:20:08(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close