エンベロープ データのデコード

エンベロープされたメッセージをデコードするために必要な一般的なタスクを次の図に示し、その後の一覧で説明します。

エンベロープされたデータのデコード

前の図に示すように、キー トランスポート キー管理を使用してエンベロープ データをデコードするためのイベントのシーケンスは次のとおりです。

  • デジタルエンベロープされたメッセージへのポインターが取得されます。
  • 証明書ストアが開きます。
  • メッセージから、受信者 ID (マイ ID) が取得されます。
  • 受信者 ID は、証明書を取得するために使用されます。
  • その証明書に関連付けられている 秘密キー が取得されます。
  • 秘密キーは、 対称 (セッション) キーの暗号化を解除するために使用されます。
  • 暗号化アルゴリズムはメッセージから取得されます。
  • 秘密キーと暗号化アルゴリズムを使用して、データが復号化されます。

次の手順では、低レベルのメッセージ関数を使用して、一覧表示したタスクを実行します。

エンベロープされたメッセージをデコードするには

  1. エンコードされた BLOB へのポインターを取得します。
  2. CryptMsgOpenToDecode を呼び出し、必要な引数を渡します。
  3. CryptMsgUpdate を 1 回呼び出し、手順 2 で取得したハンドルと、デコードするデータへのポインターを渡します。 これにより、メッセージの種類に応じて、メッセージに対して適切なアクションが実行されます。
  4. CryptMsgGetParam を呼び出し、手順 2 で取得したハンドルを渡し、CMSG_TYPE_PARAMして、メッセージがエンベロープされたデータ型であることを確認します。
  5. 再び CryptMsgGetParam を呼び出し、CMSG_INNER_CONTENT_TYPE_PARAMを渡して 内部コンテンツのデータ型を取得します。
  6. 内部コンテンツ データ型が データの場合は、コンテンツの暗号化解除とデコードに進みます。 それ以外の場合は、コンテンツ データ型に適したデコード プロシージャを実行します。
  7. 内部コンテンツ タイプが "data" であると仮定して、 CMSG_CTRL_DECRYPT_PARA データ構造を初期化し、 CryptMsgControl を呼び出して、CMSG_CTRL_DECRYPTと構造体のアドレスを渡します。 コンテンツは復号化されます。
  8. CryptMsgGetParam を呼び出し、CMSG_CONTENT_PARAMを渡して、デコードされたコンテンツ データ BLOB (BYTE 文字列) へのポインターを取得します。
  9. メッセージを閉じるには 、CryptMsgClose を呼び出します。

この手順の結果、メッセージはデコードおよび復号化され、コンテンツ データ BLOB へのポインターが取得されます。

例 C プログラム: エンベロープされた署名付きメッセージをエンコードする