次の方法で共有


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

pbDecrypted パラメーターによって指されるバッファーのサイズをバイト単位で指定する DWORD へのポインター。 関数が戻るとき、この変数には pbDecrypted にコピーされた復号化されたメッセージのサイズ (バイト単位) が含まれます。

メモpbDecrypted バッファーで返されたデータを処理する場合、アプリケーションは返されるデータの実際のサイズを使用する必要があります。 実際のサイズは、入力時に pcbDecrypted で指定されたバッファーのサイズよりも少し小さくすることができます。 入力では、バッファー サイズは通常、可能な最大の出力データがバッファーに収まるように十分な大きさで指定されます。 出力時に、 DWORD はバッファーにコピーされたデータの実際のサイズに更新されます。
 

[out, optional] ppXchgCert

メッセージの暗号化を解除するために必要な秘密交換キーに対応する証明書CERT_CONTEXT構造へのポインター。 関数が復号化に使用する 証明書コンテキスト を返してはならないことを示すには、このパラメーターを NULL に設定 します

戻り値

関数が成功した場合、関数は 0 以外 (TRUE) を返します。

関数が失敗した場合は、0 (FALSE) を返します。 拡張エラー情報については、 GetLastError を呼び出します。

メモCryptImportKeyCryptDecrypt の呼び出しからのエラーは、この関数に反映される可能性があります。
 
GetLastError 関数は、最も頻繁に次のエラー コードを返します。
リターン コード 説明
ERROR_MORE_DATA
pbDecrypted パラメーターで指定されたバッファーが、返されたデータを保持するのに十分な大きさでない場合、関数はERROR_MORE_DATA コードを設定し、必要なバッファー サイズをバイト単位で pcbDecrypted が指す変数に格納します。
E_INVALIDARG
メッセージと 証明書のエンコードの種類が無効です。 現在、PKCS_7_ASN_ENCODINGとX509_ASN_ENCODING_TYPEのみがサポートされています。 *pDecryptParacbSize が無効です。
CRYPT_E_UNEXPECTED_MSG_TYPE
エンベロープされた暗号化メッセージではありません。
NTE_BAD_ALGID
メッセージは、不明またはサポートされていないアルゴリズムを使用して暗号化されました。
CRYPT_E_NO_DECRYPT_CERT
暗号化解除に使用する 秘密キー プロパティを持つ証明書が見つかりませんでした。
 

関数が失敗した場合、GetLastError は抽象構文表記 1 (ASN.1) エンコード/デコード エラーを返す可能性があります。 これらのエラーの詳細については、「 ASN.1 エンコード/デコードの戻り値」を参照してください。

解説

pbDecryptedNULL が渡され、pcbDecryptedNULL でない場合、ppXchgCert で渡されたアドレスに対して NULL が返されます。それ以外の場合は、CERT_CONTEXTへのポインターが返されます。 正常に復号化されたメッセージの場合、 CERT_CONTEXT へのこのポインターは、メッセージの暗号化を解除するために使用される 証明書コンテキスト を指します。 CertFreeCertificateContext を呼び出して解放する必要があります。 関数が失敗した場合、 ppXchgCert の値は NULL に設定されます。

この関数を使用する例については、「 サンプル C プログラム: CryptEncryptMessage と CryptDecryptMessage の使用」を参照してください。

要件

   
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー wincrypt.h
Library Crypt32.lib
[DLL] Crypt32.dll

関連項目

CryptDecryptAndVerifyMessageSignature

簡略化されたメッセージ関数