エンベロープ データのデコード
エンベロープされたメッセージをデコードするために必要な一般的なタスクを次の図に示し、その後の一覧で説明します。
前の図に示すように、キー トランスポート キー管理を使用してエンベロープ データをデコードするためのイベントのシーケンスは次のとおりです。
- デジタルエンベロープされたメッセージへのポインターが取得されます。
- 証明書ストアが開きます。
- メッセージから、受信者 ID (マイ ID) が取得されます。
- 受信者 ID は、証明書を取得するために使用されます。
- その証明書に関連付けられている 秘密キー が取得されます。
- 秘密キーは、 対称 (セッション) キーの暗号化を解除するために使用されます。
- 暗号化アルゴリズムはメッセージから取得されます。
- 秘密キーと暗号化アルゴリズムを使用して、データが復号化されます。
次の手順では、低レベルのメッセージ関数を使用して、一覧表示したタスクを実行します。
エンベロープされたメッセージをデコードするには
- エンコードされた BLOB へのポインターを取得します。
- CryptMsgOpenToDecode を呼び出し、必要な引数を渡します。
- CryptMsgUpdate を 1 回呼び出し、手順 2 で取得したハンドルと、デコードするデータへのポインターを渡します。 これにより、メッセージの種類に応じて、メッセージに対して適切なアクションが実行されます。
- CryptMsgGetParam を呼び出し、手順 2 で取得したハンドルを渡し、CMSG_TYPE_PARAMして、メッセージがエンベロープされたデータ型であることを確認します。
- 再び CryptMsgGetParam を呼び出し、CMSG_INNER_CONTENT_TYPE_PARAMを渡して 内部コンテンツのデータ型を取得します。
- 内部コンテンツ データ型が データの場合は、コンテンツの暗号化解除とデコードに進みます。 それ以外の場合は、コンテンツ データ型に適したデコード プロシージャを実行します。
- 内部コンテンツ タイプが "data" であると仮定して、 CMSG_CTRL_DECRYPT_PARA データ構造を初期化し、 CryptMsgControl を呼び出して、CMSG_CTRL_DECRYPTと構造体のアドレスを渡します。 コンテンツは復号化されます。
- CryptMsgGetParam を呼び出し、CMSG_CONTENT_PARAMを渡して、デコードされたコンテンツ データ BLOB (BYTE 文字列) へのポインターを取得します。
- メッセージを閉じるには 、CryptMsgClose を呼び出します。
この手順の結果、メッセージはデコードおよび復号化され、コンテンツ データ BLOB へのポインターが取得されます。
関連トピック