Форум КриптоПро
»
Средства криптографической защиты информации
»
Встраивание
»
Проблема проверки подписи и расшифровки - CryptDecryptAndVerifyMessageSignature
Статус: Участник
Группы: Участники
Зарегистрирован: 25.04.2009(UTC) Сообщений: 12
|
Здравствуйте! Я подписал и зашифровал сообщение с помощью CryptSignAndEncryptMessage. Обращаюсь за помощью. Во первых не понятно, почему при вызове CryptDecryptAndVerifyMessageSignature ей не передаются указатели PCCERT_CONTEXT на сертификаты получателя и отправителя, на закрытый ключ получателя. Ну и второе - первый вызов CryptDecryptAndVerifyMessageSignature должен выделить необходимую память для расшифрованного сообщения. Функция возвращает ноль, а GetLastError() пятерку. После выполнения функции в cbDecrypted ноль. Т.е. память не выделяется. Как в msdn-овских примерах: Код:
CRYPT_DECRYPT_MESSAGE_PARA DecryptPara;
CRYPT_VERIFY_MESSAGE_PARA VerifyPara;
BYTE *pbDecrypted;
DWORD cbDecrypted;
// Open the certificate store.
DecryptPara.cbSize = sizeof(CRYPT_DECRYPT_MESSAGE_PARA);
DecryptPara.dwMsgAndCertEncodingType = MY_ENCODING_TYPE;
DecryptPara.cCertStore = 1;
DecryptPara.rghCertStore = &hCertStore; // вот здесь передается адрес хранилища, и что ??? этого разве достаточно?
VerifyPara.cbSize = sizeof(CRYPT_VERIFY_MESSAGE_PARA);
VerifyPara.dwMsgAndCertEncodingType = MY_ENCODING_TYPE;
VerifyPara.hCryptProv = 0;
VerifyPara.pfnGetSignerCertificate = 0;
VerifyPara.pvGetArg = 0;
pbDecrypted = NULL;
cbDecrypted = 0;
if(!(CryptDecryptAndVerifyMessageSignature(
&DecryptPara,
&VerifyPara,
0,
pbSignedAndEncryptedBlob,
cbSignedAndEncryptedBlob,
0,
&cbDecrypted,
NULL,
NULL)))
{
Form1->Memo1->Lines->Add("Failed getting size.");
}
DWORD err = GetLastError();
if(!(pbDecrypted = (BYTE *)malloc(cbDecrypted)))
{
Form1->Memo1->Lines->Add("Memory allocation failed.");
}
Подскажите пожалуйста, как быть??? |
Природа - МАТЬ, и её надо беречь! |
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Цитата:Во первых не понятно, почему при вызове CryptDecryptAndVerifyMessageSignature ей не передаются указатели PCCERT_CONTEXT на сертификаты получателя и отправителя, на закрытый ключ получателя. Рекомендую почитать msdn.microsoft.com - там достаточно подробно описано, как происходит выбор сертификатов в этой функции для проверки подписи и дешифрования. Хранилища вполне достаточно, если там содержится сертификат с ссылкой на закрытый ключ, которым можно расшифровать. Цитата:Подскажите пожалуйста, как быть??? Попробуйте сначала расшифровать (CryptDecryptMesage), потом проверить подпись (CryptVerifyMessageSignature) - выясните, на каком шаге возникает эта ошибка. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 25.04.2009(UTC) Сообщений: 12
|
отвечаю сам на вопрос, о том что вылетает ошибка:
в cbSignedAndEncryptedBlob передавалось значение меньше, чем реальное зашифрованное сообщение, НО остался другой вопрос :
Где все же берется закрытый ключ получателя ???
Закрытый я как понял вот здесь : DecryptPara.rghCertStore = &hCertStore;
Видимо функция сама находит отправителя, если указанно хотябы хранилище.
А закрытый ???? У меня даже расшифровывается сообщение :) несмотря на то, что я не понимаю откуда берется закрытый ключ.
Спасибо большое за потраченное на меня время. |
Природа - МАТЬ, и её надо беречь! |
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 25.04.2009(UTC) Сообщений: 12
|
Kirill Sobolev, спасибо большое. Ваше сообщение пришло одновременно с моим :) Теперь я все понял :)
Спасибо :) |
Природа - МАТЬ, и её надо беречь! |
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
Встраивание
»
Проблема проверки подписи и расшифровки - CryptDecryptAndVerifyMessageSignature
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close