Поделиться через


Функция 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.

Примечание При обработке данных, возвращаемых в буфере pbDecrypted , приложения должны использовать фактический размер возвращаемых данных. Фактический размер может быть немного меньше размера буфера, указанного в pcbDecrypted на входных данных. На входных данных размеры буфера обычно указываются достаточно большими, чтобы гарантировать, что в буфере помещаются самые большие выходные данные. В выходных данных параметр DWORD обновляется до фактического размера данных, копируемых в буфер.
 

[out, optional] ppXchgCert

Указатель на CERT_CONTEXT структуру сертификата , соответствующего закрытому ключу обмена , необходимому для расшифровки сообщения. Чтобы указать, что функция не должна возвращать контекст сертификата , используемый для расшифровки, задайте для этого параметра значение NULL.

Возвращаемое значение

Если функция выполняется успешно, функция возвращает ненулевое значение (TRUE).

Если функция завершается сбоем, она возвращает ноль (FALSE). Для получения дополнительных сведений об ошибке вызовите Метод GetLastError.

Примечание Ошибки при вызовах CryptImportKey и CryptDecrypt могут распространяться на эту функцию.
 
Функция GetLastError чаще всего возвращает следующие коды ошибок.
Код возврата Описание
ERROR_MORE_DATA
Если буфер, заданный параметром pbDecrypted , недостаточно велик для хранения возвращаемых данных, функция задает код ERROR_MORE_DATA и сохраняет требуемый размер буфера в байтах в переменной, на которую указывает pcbDecrypted.
E_INVALIDARG
Недопустимые типы кодирования сообщений и сертификатов. В настоящее время поддерживаются только PKCS_7_ASN_ENCODING и X509_ASN_ENCODING_TYPE. Недопустимый cbSize в *pDecryptPara.
CRYPT_E_UNEXPECTED_MSG_TYPE
Не конвертированное криптографическое сообщение.
NTE_BAD_ALGID
Сообщение было зашифровано с помощью неизвестного или неподдерживаемого алгоритма.
CRYPT_E_NO_DECRYPT_CERT
Не найден сертификат со свойством закрытого ключа для расшифровки.
 

Если функция завершается сбоем, 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

См. также раздел

CryptDecryptAndVerifyMessageSignature

Упрощенные функции сообщений