使用 CryptSignHash 获取 PKCS#7 签名

Getting a PKCS#7 signature with CryptSignHash

本文关键字:签名 PKCS#7 获取 CryptSignHash 使用      更新时间:2023-10-16

CryptSignMessage 可以通过在 PCRYPT_SIGN_MESSAGE_PARA 参数中传递适当的编码类型来生成 PKCS#7 签名。但是我似乎找不到一种方法来用CryptSignHash函数做同样的事情。

有没有办法使用 CryptSignHash API 创建 PKCS#7

签名,或者是否有任何其他函数可以调用来将 CryptSignHash 的输出转换为 PKCS#7?

不可以,您不能将CryptSignHash的输出转换为CryptSignMessage的输出。

CryptSignMessage创建用于创建数字签名的 CMS 容器格式。这不仅仅是签名的加密定义中的数字签名。首先对消息进行哈希处理,然后对哈希 + 可能的其他信息进行哈希处理和签名。因此,生成的签名不是对数据的直接签名。

使用CryptSignHash您可以直接对给定的哈希进行签名。该哈希直接对数据执行。由于哈希是单向的,因此无法重建数据,因此无法执行 CryptSignMessage 所需的方案。

简而言之,尽管这些方法的名称看起来相似,但这两个函数都在不同的级别执行加密。一个只是加密原语,另一个是应用程序级协议。