編碼和解碼訊息的程式
編碼一般訊息的程式如下。
編碼訊息
- 初始化所需資料類型的適當資料結構。
- 呼叫 CryptMsgOpenToEncode,並傳遞必要的引數。 呼叫 CryptMsgOpenToEncode時,如果要提供給 CryptMsgUpdate 的資料已經經過訊息編碼,請在 pszInnerContentObjID 中傳遞適當的物件識別碼 (例如「1.2.840.113549.1.7.2 szOID_RSA_signedData) 」。 如果 pszInnerContentObjID 為 Null, 則會假設內部內容類型 不是先前編碼且已適當地處理。
- 視需要呼叫 CryptMsgUpdate 以完成訊息。 在最後一次呼叫時,將 fFinal 參數設定為 TRUE。 (如需詳細資訊,請參閱 CryptMsgUpdate) 。
- 呼叫 CryptMsgGetParam 以取得所需參數的指標,例如內容。 針對簡單、一般資料的編碼,請使用 dwParamtype CMSG_CONTENT_PARAM。
- 呼叫 CryptMsgClose以關閉訊息。
此程式會產生函式呼叫中指定的型別編碼訊息。
解碼一般訊息的程式如下。
解碼訊息
- 使用 CryptMsgCalculateEncodedLength判斷緩衝區保存編碼資料所需的長度。
- 呼叫 CryptMsgOpenToDecode,並傳遞必要的引數。 為了維持與 Internet Explorer 3.0 版的相容性,會提供 dwMsgType 參數。 在 Internet Explorer 3.0 中建立的已簽署資料不包含標頭資訊。 因此,如果從檔案簽章擷取這類訊息,則必須將訊息類型傳遞至 函式。 如果零傳遞至 dwMsgType 參數,函式會從訊息上的標頭讀取訊息類型。 如果遺漏標頭,函式呼叫將會失敗。 如果成功,則會傳回已開啟之訊息的控制碼。
- 呼叫 CryptMsgUpdate 一次。 這會根據訊息類型,對訊息採取適當的動作。
- 若要進一步處理訊息,例如額外的解密或簽章驗證,請呼叫 CryptMsgControl,並在 dwCtrlType中傳遞所需的動作。
- 呼叫 CryptMsgGetParam 以取得所需參數的指標,例如內容。 若要解碼簡單的一般資料,請使用 dwParamtype 參數CMSG_CONTENT_PARAM。
- 呼叫 CryptMsgClose 以關閉訊息。
如需實作這些步驟的範例,請參閱 範例 C 程式:編碼和解碼資料。 如需示範編碼、解碼和驗證已簽署訊息簽章的程式和範例,請參閱 範例 C 程式:簽署、編碼、解碼和驗證訊息。