Функция CryptDecryptMessage (wincrypt.h)
Функция CryptDecryptMessageдекодирует и расшифровывает сообщение.
Синтаксис
BOOL CryptDecryptMessage(
[in] PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
[in] const BYTE *pbEncryptedBlob,
[in] DWORD cbEncryptedBlob,
[out, optional] BYTE *pbDecrypted,
[in, out, optional] DWORD *pcbDecrypted,
[out, optional] PCCERT_CONTEXT *ppXchgCert
);
Параметры
[in] pDecryptPara
Указатель на структуру CRYPT_DECRYPT_MESSAGE_PARA , содержащую параметры расшифровки.
[in] pbEncryptedBlob
Указатель на буфер, содержащий закодированное и зашифрованное сообщение для расшифровки.
[in] cbEncryptedBlob
Размер закодированного и зашифрованного сообщения в байтах.
[out, optional] pbDecrypted
Указатель на буфер, получающий расшифрованное сообщение.
Чтобы задать размер этих сведений для выделения памяти, этот параметр может иметь значение NULL. Расшифрованное сообщение не будет возвращено, если этот параметр имеет значение NULL. Дополнительные сведения см. в разделе Извлечение данных неизвестной длины.
[in, out, optional] pcbDecrypted
Указатель на DWORD , указывающий размер (в байтах) буфера, на который указывает параметр pbDecrypted . При возврате функции эта переменная содержит размер в байтах расшифрованного сообщения, скопированного в pbDecrypted.
[out, optional] ppXchgCert
Указатель на CERT_CONTEXT структуру сертификата , соответствующего закрытому ключу обмена , необходимому для расшифровки сообщения. Чтобы указать, что функция не должна возвращать контекст сертификата , используемый для расшифровки, задайте для этого параметра значение NULL.
Возвращаемое значение
Если функция выполняется успешно, функция возвращает ненулевое значение (TRUE).
Если функция завершается сбоем, она возвращает ноль (FALSE). Для получения дополнительных сведений об ошибке вызовите Метод GetLastError.
Код возврата | Описание |
---|---|
|
Если буфер, заданный параметром pbDecrypted , недостаточно велик для хранения возвращаемых данных, функция задает код ERROR_MORE_DATA и сохраняет требуемый размер буфера в байтах в переменной, на которую указывает pcbDecrypted. |
|
Недопустимые типы кодирования сообщений и сертификатов. В настоящее время поддерживаются только PKCS_7_ASN_ENCODING и X509_ASN_ENCODING_TYPE. Недопустимый cbSize в *pDecryptPara. |
|
Не конвертированное криптографическое сообщение. |
|
Сообщение было зашифровано с помощью неизвестного или неподдерживаемого алгоритма. |
|
Не найден сертификат со свойством закрытого ключа для расшифровки. |
Если функция завершается сбоем, GetLastError может вернуть ошибку кодирования и декодирования абстрактной синтаксической нотации 1 (ASN.1). Сведения об этих ошибках см. в разделе Кодирование и декодирование возвращаемых значений ASN.1.
Комментарии
Если значение NULL передается для pbDecrypted, а pcbDecrypted не равно NULL, возвращается значение NULL для адреса, переданного в ppXchgCert; в противном случае возвращается указатель на CERT_CONTEXT . Для успешно расшифрованного сообщения этот указатель на CERT_CONTEXT указывает на контекст сертификата , используемый для расшифровки сообщения. Его необходимо освободить, вызвав CertFreeCertificateContext. Если функция завершается сбоем, значение ppXchgCert устанавливается в null.
Примеры
Пример использования этой функции см. в разделе Пример программы C: использование CryptEncryptMessage и CryptDecryptMessage.
Требования
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | wincrypt.h |
Библиотека | Crypt32.lib |
DLL | Crypt32.dll |