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 を呼び出します。

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

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

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

注釈

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

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

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

要件

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

こちらもご覧ください

CryptDecryptMessage

CryptVerifyMessageHash

CryptVerifyMessageSignature

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