验证已签名的消息
这些步骤验证已签名数据的签名。 下图描绘了必须完成的各个任务,如其后的列表中所示。
验证已签名邮件的签名
获取指向已签名消息的指针。
打开 证书存储。
使用消息中包含的签名者 ID 获取发件人的证书并获取其 公钥的句柄。
作为步骤 2 和 3 的替代方法,可以使用消息中包含的证书来检索签名者的公钥。
使用签名者的公钥解密数字签名,生成消息中数据的原始摘要。
使用消息中包含的哈希算法,对消息中包含的数据进行 哈希 处理,从而生成新的摘要。
将从消息中检索到的摘要与刚刚创建的新摘要进行比较。
如果两个摘要匹配,则验证签名。 这意味着,用于对数据进行签名的 私钥 与刚刚用于解密签名的公钥匹配,并且数据自数据签名后未发生更改。
如果两个摘要不匹配,则不会验证签名,并且私钥/公钥不匹配,或者数据自数据签名后已更改,或者两者兼有。
单个函数 CryptVerifyMessageSignature 可用于验证签名,如以下过程所示。
验证已签名消息
- 获取指向已签名消息的指针。
- 获取已签名消息的大小。
- 获取加密提供程序的句柄。
- 初始化 CRYPT_VERIFY_MESSAGE_PARA 结构。
- 调用 CryptVerifyMessageSignature 以验证签名。
实现此过程的代码包含在 示例 C 程序:对消息签名和验证消息签名中。