18.05.2005 10:22:57проблемы с CryptDecryptAndVerifyMessageSignature Ответов: 5
Иван
Возникла следующая проблема:
В своей программе я храню сертификаты в "самодельной" БД. Разработал набор функций для работы с этими сертификатами. Без проблем осуществлял создание и проверку ЭЦП (как на базе КриптоПро, так и eToken CSP). Сейчас возникла необходимость ещё и шифровать/дешифровать данные несимметричными алгоритмами.

Шифрую и подписываю функцией CryptSignAndEncryptMessage без проблем. А вот осуществить обратную операцию функцией CryptDecryptAndVerifyMessageSignature не могу (ошибка: CRYPT_E_NO_DECRYPT_CERT: Cannot find the certificate and private key to use for decryption).
Выполняю эти две функции в рамках одного процесса, получаю контексты серификатов без проблем.
Есть ли какие-то нюансы при работе с этой функцией ?
 
Ответы:
18.05.2005 11:34:00Василий
Из описания параметра rghCertStore (в структуре CRYPT_DECRYPT_MESSAGE_PARA):
Only certificate contexts in the store with one of the following properties, CERT_KEY_PROV_INFO_PROP_ID, or CERT_KEY_CONTEXT_PROP_ID can be used. These properties specify the location of a needed private exchange key.

Т.е. для зашифрования нужен только сертификат получателя, для расшифрования - сертификат и закрытый ключ, ссылка на который должна быть задана в контексте сертификата.
18.05.2005 15:12:03Иван
> Т.е. для зашифрования нужен только сертификат получателя, для расшифрования - сертификат и закрытый ключ, ссылка на который должна быть задана в контексте сертификата.

Вот и не понятно. Если я могу подписать данные (для этого ведь нужен закрытый ключ) без проблем, почему я не могу расшифровать данные ?
Описание, приведенных Вами параметров, я читал и попытался сделать как написано, но это не помогло.
18.05.2005 18:22:54Василий
для подписи и для шифрования используются разные структуры, содержащие, в т.ч., контекст сертификата:
pDecryptPara
[in] Pointer to a CRYPT_DECRYPT_MESSAGE_PARA structure that contains decryption parameters.
pVerifyPara
[in] Pointer to a CRYPT_VERIFY_MESSAGE_PARA structure that contains verification parameters.
18.05.2005 18:29:49Василий
Кстати, Вы смотрели наш пример csptest, файл ctmsg.c ?
http://www.cryptopro.ru/CryptoPro/test/sample2_0.zip
19.05.2005 10:03:18Иван
спасибо.

разумеется, смотрел и Ваш пример и мсдн-овский