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程式碼,並將所需的緩衝區大小以位元組為單位儲存在 由bsDecrypted所指向的變數中。 |
|
不正確訊息和 憑證編碼類型。 目前僅支援PKCS_7_ASN_ENCODING和X509_ASN_ENCODING_TYPE。 *pDecryptPara中的cbSize無效。 |
|
不是 信封密碼編譯 訊息。 |
|
訊息已使用未知或不支援的演算法進行加密。 |
|
找不到憑證具有用於解密的 私密金鑰 屬性。 |
如果函式失敗, GetLastError 可能會傳回 抽象語法標記法一 (ASN.1) 編碼/解碼錯誤。 如需這些錯誤的相關資訊,請參閱 ASN.1 編碼/解碼傳回值。
備註
當針對 pbDecrypted傳遞Null,而sslDecrypted不是Null時,會針對在 ppXchgCert中傳遞的位址傳回Null;否則,會傳回CERT_CONTEXT的指標。 針對成功解密的訊息, CERT_CONTEXT 指向用來解密訊息的 憑證內容 。 它必須透過呼叫 CertFreeCertificateCoNtext來釋出。 如果函式失敗, ppXchgCert 的值會設定為 Null。
範例
如需使用此函式的範例,請參閱 範例 C 程式:使用 CryptEncryptMessage 和 CryptDecryptMessage。
規格需求
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | wincrypt.h |
程式庫 | Crypt32.lib |
Dll | Crypt32.dll |