解码已签名数据

以下常规过程对 已签名数据类型 进行解码。

解码已签名消息

  1. 获取指向编码 BLOB 的指针。
  2. 调用 CryptMsgOpenToDecode,传递必要的参数。
  3. 调用 CryptMsgUpdate 一次,传入步骤 2 中检索的句柄,以及指向要解码的数据的指针。 这会导致对消息执行相应的操作,具体取决于消息类型。
  4. 调用 CryptMsgGetParam,传入步骤 2 中检索的句柄以及用于访问解码的数据的适当参数类型。 例如,传入CMSG_CONTENT_PARAM以获取指向解码内容的指针。

以下常规过程验证已解码的已签名消息的签名。

验证已解码、已签名的消息的签名

  1. 调用 CryptMsgGetParam,传入消息句柄并CMSG_SIGNER_CERT_INFO_PARAM从消息中获取签名者的 CERT_INFO
  2. 调用 CertOpenStore 以打开使用消息中的证书初始化的临时存储。
  3. 调用 CertGetSubjectCertificateFromStore ,从消息中包含的证书中获取签名者的 CERT_INFO
  4. 调用 CryptMsgControl,传入CMSG_CTRL_VERIFY_SIGNATURE以验证签名。
  5. 调用 CryptMsgClose 关闭消息。

这些过程的结果是验证签名,并将指针检索到在过程步骤 4 中获取的解码消息内容,以便解码已签名消息。

有关 C 编码详细信息,请参阅 示例 C 程序:签名、编码、解码和验证消息