验证已签名的消息

这些步骤验证已签名数据的签名。 下图描绘了必须完成的各个任务,如其后的列表中所示。

验证已签名邮件

验证已签名邮件的签名

  1. 获取指向已签名消息的指针。

  2. 打开 证书存储

  3. 使用消息中包含的签名者 ID 获取发件人的证书并获取其 公钥的句柄。

    作为步骤 2 和 3 的替代方法,可以使用消息中包含的证书来检索签名者的公钥。

  4. 使用签名者的公钥解密数字签名,生成消息中数据的原始摘要。

  5. 使用消息中包含的哈希算法,对消息中包含的数据进行 哈希 处理,从而生成新的摘要。

  6. 将从消息中检索到的摘要与刚刚创建的新摘要进行比较。

  7. 如果两个摘要匹配,则验证签名。 这意味着,用于对数据进行签名的 私钥 与刚刚用于解密签名的公钥匹配,并且数据自数据签名后未发生更改。

    如果两个摘要不匹配,则不会验证签名,并且私钥/公钥不匹配,或者数据自数据签名后已更改,或者两者兼有。

单个函数 CryptVerifyMessageSignature 可用于验证签名,如以下过程所示。

验证已签名消息

  1. 获取指向已签名消息的指针。
  2. 获取已签名消息的大小。
  3. 获取加密提供程序的句柄。
  4. 初始化 CRYPT_VERIFY_MESSAGE_PARA 结构。
  5. 调用 CryptVerifyMessageSignature 以验证签名。

实现此过程的代码包含在 示例 C 程序:对消息签名和验证消息签名中。