共用方式為


編碼和解碼訊息的程式

編碼一般訊息的程式如下。

編碼訊息

  1. 初始化所需資料類型的適當資料結構。
  2. 呼叫 CryptMsgOpenToEncode,並傳遞必要的引數。 呼叫 CryptMsgOpenToEncode時,如果要提供給 CryptMsgUpdate 的資料已經經過訊息編碼,請在 pszInnerContentObjID 中傳遞適當的物件識別碼 (例如「1.2.840.113549.1.7.2 szOID_RSA_signedData) 」。 如果 pszInnerContentObjIDNull則會假設內部內容類型 不是先前編碼且已適當地處理。
  3. 視需要呼叫 CryptMsgUpdate 以完成訊息。 在最後一次呼叫時,將 fFinal 參數設定為 TRUE。 (如需詳細資訊,請參閱 CryptMsgUpdate) 。
  4. 呼叫 CryptMsgGetParam 以取得所需參數的指標,例如內容。 針對簡單、一般資料的編碼,請使用 dwParamtype CMSG_CONTENT_PARAM。
  5. 呼叫 CryptMsgClose以關閉訊息。

此程式會產生函式呼叫中指定的型別編碼訊息。

解碼一般訊息的程式如下。

解碼訊息

  1. 使用 CryptMsgCalculateEncodedLength判斷緩衝區保存編碼資料所需的長度。
  2. 呼叫 CryptMsgOpenToDecode,並傳遞必要的引數。 為了維持與 Internet Explorer 3.0 版的相容性,會提供 dwMsgType 參數。 在 Internet Explorer 3.0 中建立的已簽署資料不包含標頭資訊。 因此,如果從檔案簽章擷取這類訊息,則必須將訊息類型傳遞至 函式。 如果零傳遞至 dwMsgType 參數,函式會從訊息上的標頭讀取訊息類型。 如果遺漏標頭,函式呼叫將會失敗。 如果成功,則會傳回已開啟之訊息的控制碼。
  3. 呼叫 CryptMsgUpdate 一次。 這會根據訊息類型,對訊息採取適當的動作。
  4. 若要進一步處理訊息,例如額外的解密或簽章驗證,請呼叫 CryptMsgControl,並在 dwCtrlType中傳遞所需的動作。
  5. 呼叫 CryptMsgGetParam 以取得所需參數的指標,例如內容。 若要解碼簡單的一般資料,請使用 dwParamtype 參數CMSG_CONTENT_PARAM。
  6. 呼叫 CryptMsgClose 以關閉訊息。

如需實作這些步驟的範例,請參閱 範例 C 程式:編碼和解碼資料。 如需示範編碼、解碼和驗證已簽署訊息簽章的程式和範例,請參閱 範例 C 程式:簽署、編碼、解碼和驗證訊息