| ||||
| ||||
Возникла следующая проблема: В своей программе я храню сертификаты в "самодельной" БД. Разработал набор функций для работы с этими сертификатами. Без проблем осуществлял создание и проверку ЭЦП (как на базе КриптоПро, так и eToken CSP). Сейчас возникла необходимость ещё и шифровать/дешифровать данные несимметричными алгоритмами. Шифрую и подписываю функцией CryptSignAndEncryptMessage без проблем. А вот осуществить обратную операцию функцией CryptDecryptAndVerifyMessageSignature не могу (ошибка: CRYPT_E_NO_DECRYPT_CERT: Cannot find the certificate and private key to use for decryption). Выполняю эти две функции в рамках одного процесса, получаю контексты серификатов без проблем. Есть ли какие-то нюансы при работе с этой функцией ? | ||||
Ответы: | ||||
| ||||
Из описания параметра 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. Т.е. для зашифрования нужен только сертификат получателя, для расшифрования - сертификат и закрытый ключ, ссылка на который должна быть задана в контексте сертификата. | ||||
| ||||
> Т.е. для зашифрования нужен только сертификат получателя, для расшифрования - сертификат и закрытый ключ, ссылка на который должна быть задана в контексте сертификата. Вот и не понятно. Если я могу подписать данные (для этого ведь нужен закрытый ключ) без проблем, почему я не могу расшифровать данные ? Описание, приведенных Вами параметров, я читал и попытался сделать как написано, но это не помогло. | ||||
| ||||
для подписи и для шифрования используются разные структуры, содержащие, в т.ч., контекст сертификата: 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. | ||||
| ||||
Кстати, Вы смотрели наш пример csptest, файл ctmsg.c ? http://www.cryptopro.ru/CryptoPro/test/sample2_0.zip | ||||
| ||||
спасибо. разумеется, смотрел и Ваш пример и мсдн-овский | ||||