CryptDecodeMessage 関数 (wincrypt.h)

CryptDecodeMessage 関数は、暗号化メッセージをデコード、復号化、検証します。

この関数は、暗号化メッセージの種類が不明な場合に使用できます。 dwMsgTypeFlags 定数をビットごとの OR 演算と組み合わせて、関数がいずれかの型を検索できるようにします。 いずれかの型が見つかると、関数は検出された型を報告し、その型に適したデータを返します。

各パスでは、関数は単一レベルの暗号化またはエンコードのみを割り込みます。 さらにクラッキングを行うには、この関数または他の 簡易メッセージ関数の 1 つを再度呼び出す必要があります。

構文

BOOL CryptDecodeMessage(
  [in]                DWORD                       dwMsgTypeFlags,
  [in]                PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
  [in]                PCRYPT_VERIFY_MESSAGE_PARA  pVerifyPara,
  [in]                DWORD                       dwSignerIndex,
  [in]                const BYTE                  *pbEncodedBlob,
  [in]                DWORD                       cbEncodedBlob,
  [in]                DWORD                       dwPrevInnerContentType,
  [out, optional]     DWORD                       *pdwMsgType,
  [out, optional]     DWORD                       *pdwInnerContentType,
  [out, optional]     BYTE                        *pbDecoded,
  [in, out, optional] DWORD                       *pcbDecoded,
  [out, optional]     PCCERT_CONTEXT              *ppXchgCert,
  [out, optional]     PCCERT_CONTEXT              *ppSignerCert
);

パラメーター

[in] dwMsgTypeFlags

メッセージの種類を示します。 メッセージ型は、ビットごとの OR 演算子と組み合わせることができます。 このパラメーターには、次のいずれかのメッセージの種類を指定できます。

  • CMSG_DATA_FLAG
  • CMSG_SIGNED_FLAG
  • CMSG_ENVELOPED_FLAG
  • CMSG_SIGNED_AND_ENVELOPED_FLAG
  • CMSG_HASHED_FLAG
メモ戻った後、pdwMsgType が指す DWORD はメッセージの型で設定されます。
 

[in] pDecryptPara

復号化パラメーターを含む CRYPT_DECRYPT_MESSAGE_PARA 構造体へのポインター。

[in] pVerifyPara

検証パラメーターを含む CRYPT_VERIFY_MESSAGE_PARA 構造体へのポインター。

[in] dwSignerIndex

メッセージの多くの署名者のうち、検証する署名者を示します。 このインデックスは、関数の複数の呼び出しで変更して、追加の署名者を確認できます。

dwSignerIndex は、最初の署名者に対して 0 に設定されます。 関数が FALSE を返し、 GetLastError が CRYPT_E_NO_SIGNERを返した場合、前の呼び出しはメッセージの最後の署名者を返しました。 このパラメーターは、CMSG_SIGNED_AND_ENVELOPEDまたはCMSG_SIGNED型のメッセージでのみ使用されます。 他のすべてのメッセージの種類では、0 に設定する必要があります。

[in] pbEncodedBlob

デコードされるエンコードされた BLOB へのポインター。

[in] cbEncodedBlob

エンコードされた BLOB のサイズ (バイト単位)。

[in] dwPrevInnerContentType

入れ子になった暗号化メッセージを処理する場合にのみ適用されます。 外部暗号化メッセージを処理する場合は、0 に設定する必要があります。 入れ子になった暗号化メッセージをデコードする場合、外部メッセージの CryptDecodeMessage の以前の呼び出しによって pdwInnerContentType で返される値に設定されます。 pdwMsgType にリストされている CMSG タイプのいずれかを指定できます。 下位互換性を保つために、 dwPrevInnerContentType を 0 に設定します。

[out, optional] pdwMsgType

返されるメッセージの種類を指定する DWORD へのポインター。 このパラメーターには、次のいずれかのメッセージの種類を指定できます。

  • CMSG_DATA
  • CMSG_SIGNED
  • CMSG_ENVELOPED
  • CMSG_SIGNED_AND_ENVELOPED
  • CMSG_HASHED

[out, optional] pdwInnerContentType

内部メッセージの型を指定する DWORD へのポインター。 pdwMsgType に使用されるメッセージ型コードもここで使用されます。

暗号化の入れ子がない場合は、CMSG_DATAが返されます。

[out, optional] pbDecoded

デコードされたメッセージを受信するバッファーへのポインター。

デコードされたメッセージが不要な場合、またはメモリ割り当てのためにデコードされたメッセージのサイズを設定する場合、このパラメーターは NULL にすることができます 。 このパラメーターが NULL の場合、デコードされたメッセージは返されません。 詳細については、「不明な 長さのデータの取得」を参照してください。

[in, out, optional] pcbDecoded

pbDecoded パラメーターが指すバッファーのサイズをバイト単位で指定する変数へのポインター。 関数が戻るときに、この変数にはデコードされたメッセージのサイズが含まれます。

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

[out, optional] ppXchgCert

メッセージのデコードに必要な秘密交換キーに対応する証明書を持つCERT_CONTEXT構造体へのポインターへのポインター。 このパラメーターは、メッセージの種類CMSG_ENVELOPEDとCMSG_SIGNED_AND_ENVELOPEDにのみ設定されます。

[out, optional] ppSignerCert

署名者の証明書コンテキストのCERT_CONTEXT構造へのポインターへのポインター。 このパラメーターは、メッセージの種類CMSG_SIGNEDとCMSG_SIGNED_AND_ENVELOPEDにのみ設定されます。

戻り値

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

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

CryptDecryptMessage、CryptVerifyMessageSignature、または CryptVerifyMessageHash 関数をこの関数に反映できます。

次のエラー コードは、 GetLastError 関数によって最も一般的に返されます。

リターン コード 説明
ERROR_MORE_DATA
pbDecoded パラメーターで指定されたバッファーが、返されたデータを保持するのに十分な大きさでない場合、関数はERROR_MORE_DATA コードを設定し、必要なバッファー サイズをバイト単位で pcbDecoded が指す変数に格納します。

注釈

dwMsgTypeFlags パラメーターは、許容されるメッセージのセットを指定します。 たとえば、SIGNED メッセージまたは ENVELOPED メッセージをデコードするには、 dwMsgTypeFlags を CMSG_SIGNED_FLAG | に設定します。CMSG_ENVELOPED_FLAG。 pDecryptPara パラメーターまたは pVerifyPara パラメーターのいずれかまたは両方を指定する必要があります。

正常にデコードまたは検証されたメッセージの場合、ppXchgCert と ppSignerCert が指す証明書コンテキスト ポインターが更新されます。 CertFreeCertificateContext を呼び出して解放する必要があります。 関数が失敗した場合は、 NULL に設定されます。

関数が呼び出される前に 、ppXchgCert パラメーターまたは ppSignerCert パラメーターを NULL に設定できます。これは、呼び出し元が Exchange 証明書または署名者 証明書コンテキストの取得に関心を持たないことを示します。

要件

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

こちらもご覧ください

CryptDecryptMessage

CryptVerifyMessageHash

CryptVerifyMessageSignature

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