Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.12.2021(UTC) Сообщений: 36 Сказал(а) «Спасибо»: 5 раз
|
Здравствуйте! Мне необходимо подписывать хэш, который приходит мне без самих данных. Я использовал метод CadesSignedData.SignHash(). Но дело в том, что он как аргумент HashedData - тип из CAPICOM. Но этот тип можно инстанцировать, хэшируя исходные данные и нельзя из готового хэша. Также имеется тип CPHashedData, объект которого можно создать из имеющегося хэша. Однако, он не приводится явно к типу HashedData . не могли бы вы подсказать, как я могу подписать имеющийся хэш
|
|
|
|
Статус: Сотрудник
Группы: Модератор, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,193 Сказал(а) «Спасибо»: 100 раз Поблагодарили: 274 раз в 254 постах
|
Добрый день! на выходе какая подпись нужна? raw или cms? |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.12.2021(UTC) Сообщений: 36 Сказал(а) «Спасибо»: 5 раз
|
Автор: Санчир Момолдаев Добрый день! на выходе какая подпись нужна? raw или cms? Нужна подпись в формате CADES BES, которую нужно сериализовать и отправить на сервер, где она будет валидироваться.
|
|
|
|
Статус: Сотрудник
Группы: Модератор, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,193 Сказал(а) «Спасибо»: 100 раз Поблагодарили: 274 раз в 254 постах
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.12.2021(UTC) Сообщений: 36 Сказал(а) «Спасибо»: 5 раз
|
Автор: Санчир Момолдаев Это да. Но метод подписывания хэша имеет другой тип данных(HashedData) и явное приведение типов не работает(см. вложенный скрин)
|
|
|
|
Статус: Сотрудник
Группы: Модератор, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,193 Сказал(а) «Спасибо»: 100 раз Поблагодарили: 274 раз в 254 постах
|
инстанцируете HashedData, задаете значение хэша SetHashValue, подписываете .SignHash |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.12.2021(UTC) Сообщений: 36 Сказал(а) «Спасибо»: 5 раз
|
Автор: Санчир Момолдаев инстанцируете HashedData, задаете значение хэша SetHashValue, подписываете .SignHash В том то и дело, что в HashedData нет этого метода -https://docs.microsoft.com/en-us/windows/win32/seccrypto/hasheddata Он есть в CpHashedData. Но CadesSignedData.SignHash() принимает именно HashedData
|
|
|
|
Статус: Сотрудник
Группы: Модератор, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,193 Сказал(а) «Спасибо»: 100 раз Поблагодарили: 274 раз в 254 постах
|
просто приведите типы. Код: var hash1 = new CPHashedData();
hash1.Algorithm = (CAPICOM_HASH_ALGORITHM) CADESCOM_HASH_ALGORITHM.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256;
hash1.DataEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY;
hash1.Hash(Convert.ToBase64String(Encoding.UTF8.GetBytes("data")));
var hashValue = hash1.Value;
Console.WriteLine(hashValue);
var hash2 = new CPHashedData();
hash2.Algorithm = (CAPICOM_HASH_ALGORITHM)CADESCOM_HASH_ALGORITHM.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256;
hash2.SetHashValue(hashValue);
var signHashValue = new CadesSignedData();
signHashValue.ContentEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY;
string detached = signHashValue.SignHash((HashedData)hash2, oSigner, CADESCOM_CADES_TYPE.CADESCOM_CADES_BES);
Console.WriteLine(detached);
File.WriteAllText("c:/work/signhash.txt.sig", detached);
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.12.2021(UTC) Сообщений: 36 Сказал(а) «Спасибо»: 5 раз
|
Автор: Санчир Момолдаев просто приведите типы. Код: var hash1 = new CPHashedData();
hash1.Algorithm = (CAPICOM_HASH_ALGORITHM) CADESCOM_HASH_ALGORITHM.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256;
hash1.DataEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY;
hash1.Hash(Convert.ToBase64String(Encoding.UTF8.GetBytes("data")));
var hashValue = hash1.Value;
Console.WriteLine(hashValue);
var hash2 = new CPHashedData();
hash2.Algorithm = (CAPICOM_HASH_ALGORITHM)CADESCOM_HASH_ALGORITHM.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256;
hash2.SetHashValue(hashValue);
var signHashValue = new CadesSignedData();
signHashValue.ContentEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY;
string detached = signHashValue.SignHash((HashedData)hash2, oSigner, CADESCOM_CADES_TYPE.CADESCOM_CADES_BES);
Console.WriteLine(detached);
File.WriteAllText("c:/work/signhash.txt.sig", detached);
Большое спасибо! Буду пробовать
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.12.2021(UTC) Сообщений: 36 Сказал(а) «Спасибо»: 5 раз
|
Автор: Санчир Момолдаев просто приведите типы. Код: var hash1 = new CPHashedData();
hash1.Algorithm = (CAPICOM_HASH_ALGORITHM) CADESCOM_HASH_ALGORITHM.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256;
hash1.DataEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY;
hash1.Hash(Convert.ToBase64String(Encoding.UTF8.GetBytes("data")));
var hashValue = hash1.Value;
Console.WriteLine(hashValue);
var hash2 = new CPHashedData();
hash2.Algorithm = (CAPICOM_HASH_ALGORITHM)CADESCOM_HASH_ALGORITHM.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256;
hash2.SetHashValue(hashValue);
var signHashValue = new CadesSignedData();
signHashValue.ContentEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY;
string detached = signHashValue.SignHash((HashedData)hash2, oSigner, CADESCOM_CADES_TYPE.CADESCOM_CADES_BES);
Console.WriteLine(detached);
File.WriteAllText("c:/work/signhash.txt.sig", detached);
Приведение типов работает, но теперь появился вопрос. Здесь алгоритм хэширования указан явно, а мне нужно брать его из сертификата. Не подскажите. как это можно сделать, используя данную библиотеку?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close