共用方式為


編碼和解碼雜湊訊息

雜湊資料是由任何類型的內容和內容的 雜湊 所組成。 只有在建立雜湊之後,才需要確認訊息內容尚未修改時,就可以使用它。

建立雜湊訊息時,可能會有多個雜湊演算法和多個雜湊。 下圖描述編碼雜湊訊息所需的工作。 此程式會在圖例後面的文字中描述。

建立雜湊訊息

建立雜湊訊息

  1. 取得要雜湊之資料的指標。
  2. 選取要使用的雜湊演算法。
  3. 使用雜湊演算法,透過雜湊函式放置資料。
  4. 包含要雜湊的原始資料、雜湊演算法,以及編碼訊息中的雜湊。

若要使用低階訊息函式來完成剛才概述的工作,請使用下列程式。

若要使用低階訊息函式雜湊和編碼訊息

  1. 建立或擷取要雜湊的內容。

  2. 取得密碼編譯提供者。

  3. 初始化 CMSG_HASHED_ENCODE_INFO 結構。

  4. 呼叫 CryptMsgCalculateEncodedLength 以取得編碼訊息 BLOB 的大小。 為其配置記憶體。

  5. 呼叫CryptMsgOpenToEncode,針對dwMsgType參數傳入 CMSG_HASHED,以及pvMsgEncodeInfo參數CMSG_HASHED_ENCODE_INFO指標。 由於此呼叫,您會取得已開啟訊息的控制碼。

  6. 呼叫 CryptMsgUpdate,傳入步驟 5 中擷取的控制碼,以及要雜湊和編碼之資料的指標。 您可以視需要呼叫此函式,以完成編碼程式。

  7. 呼叫 CryptMsgGetParam,傳入步驟 5 中擷取的控制碼和適當的參數類型,以存取所需的編碼資料。 例如,傳入 CMSG_CONTENT_PARAM 以取得整個 PKCS #7 訊息的指標。

    如果此編碼的結果是要當做另一個編碼訊息 的內部資料 使用,例如信封郵件,則必須傳遞CMSG_BARE_CONTENT_PARAM。 如需顯示此範例的範例,請參閱 編碼信封訊息的替代程式碼

  8. 呼叫 CryptMsgClose以關閉訊息。

此程式的結果是包含原始資料的編碼訊息、雜湊演算法,以及該資料的 雜湊 。 在步驟 7 中會取得編碼訊息 BLOB 的指標。

下列兩個程式會解碼,然後驗證雜湊資料。

解碼雜湊資料

  1. 取得編碼 BLOB 的指標。
  2. 呼叫 CryptMsgOpenToDecode,並傳遞必要的引數。
  3. 呼叫 CryptMsgUpdate 一次,傳入步驟 2 中擷取的控制碼,以及要解碼之資料的指標。 這會根據訊息類型,對訊息採取適當的動作。
  4. 呼叫 CryptMsgGetParam,傳入在步驟 2 中擷取的控制碼,以及存取所需解碼資料的適當參數類型。 例如,傳入 CMSG_CONTENT_PARAM,以取得解碼內容的指標。

驗證雜湊

  1. 呼叫 CryptMsgControl,傳入CMSG_CTRL_VERIFY_HASH以確認雜湊。
  2. 呼叫 CryptMsgClose 以關閉訊息。

如需範例程式,請參閱 範例 C 程式:編碼和解碼雜湊訊息