編碼和解碼雜湊訊息
雜湊資料是由任何類型的內容和內容的 雜湊 所組成。 只有在建立雜湊之後,才需要確認訊息內容尚未修改時,就可以使用它。
建立雜湊訊息時,可能會有多個雜湊演算法和多個雜湊。 下圖描述編碼雜湊訊息所需的工作。 此程式會在圖例後面的文字中描述。
建立雜湊訊息
- 取得要雜湊之資料的指標。
- 選取要使用的雜湊演算法。
- 使用雜湊演算法,透過雜湊函式放置資料。
- 包含要雜湊的原始資料、雜湊演算法,以及編碼訊息中的雜湊。
若要使用低階訊息函式來完成剛才概述的工作,請使用下列程式。
若要使用低階訊息函式雜湊和編碼訊息
建立或擷取要雜湊的內容。
取得密碼編譯提供者。
初始化 CMSG_HASHED_ENCODE_INFO 結構。
呼叫 CryptMsgCalculateEncodedLength 以取得編碼訊息 BLOB 的大小。 為其配置記憶體。
呼叫CryptMsgOpenToEncode,針對dwMsgType參數傳入 CMSG_HASHED,以及pvMsgEncodeInfo參數CMSG_HASHED_ENCODE_INFO指標。 由於此呼叫,您會取得已開啟訊息的控制碼。
呼叫 CryptMsgUpdate,傳入步驟 5 中擷取的控制碼,以及要雜湊和編碼之資料的指標。 您可以視需要呼叫此函式,以完成編碼程式。
呼叫 CryptMsgGetParam,傳入步驟 5 中擷取的控制碼和適當的參數類型,以存取所需的編碼資料。 例如,傳入 CMSG_CONTENT_PARAM 以取得整個 PKCS #7 訊息的指標。
如果此編碼的結果是要當做另一個編碼訊息 的內部資料 使用,例如信封郵件,則必須傳遞CMSG_BARE_CONTENT_PARAM。 如需顯示此範例的範例,請參閱 編碼信封訊息的替代程式碼。
呼叫 CryptMsgClose以關閉訊息。
此程式的結果是包含原始資料的編碼訊息、雜湊演算法,以及該資料的 雜湊 。 在步驟 7 中會取得編碼訊息 BLOB 的指標。
下列兩個程式會解碼,然後驗證雜湊資料。
解碼雜湊資料
- 取得編碼 BLOB 的指標。
- 呼叫 CryptMsgOpenToDecode,並傳遞必要的引數。
- 呼叫 CryptMsgUpdate 一次,傳入步驟 2 中擷取的控制碼,以及要解碼之資料的指標。 這會根據訊息類型,對訊息採取適當的動作。
- 呼叫 CryptMsgGetParam,傳入在步驟 2 中擷取的控制碼,以及存取所需解碼資料的適當參數類型。 例如,傳入 CMSG_CONTENT_PARAM,以取得解碼內容的指標。
驗證雜湊
- 呼叫 CryptMsgControl,傳入CMSG_CTRL_VERIFY_HASH以確認雜湊。
- 呼叫 CryptMsgClose 以關閉訊息。
如需範例程式,請參閱 範例 C 程式:編碼和解碼雜湊訊息。