解碼信封資料

解碼信封郵件所需的一般工作,如下圖所示,並說明在後面的清單中。

解碼信封資料

使用金鑰傳輸金鑰管理來解碼信封資料的事件順序,如下圖所示:

  • 會擷取 數位信封 訊息的指標。
  • 隨即開啟憑證存放區
  • 從郵件中,會擷取收件者識別碼 (我的識別碼) 。
  • 收件者識別碼是用來擷取憑證。
  • 擷取與該憑證相關聯的 私密金鑰
  • 私密金鑰可用來解密 對稱 (會話) 金鑰。
  • 加密演算法是從訊息擷取。
  • 使用私密金鑰和加密演算法,資料會解密。

下列程式會使用低階訊息函式來完成剛才列出的工作。

解碼信封郵件

  1. 取得編碼 BLOB 的指標。
  2. 呼叫 CryptMsgOpenToDecode,並傳遞必要的引數。
  3. 呼叫 CryptMsgUpdate 一次,傳入步驟 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 程式:編碼信封、已簽署的訊息