作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试移植 AquaticPrime适用于 Mac 到 Windows 的框架。
在 Mac 上,它使用 opensll 库,我尝试了解如何将其移植到 Windows,我猜我必须在 Windows 上使用 CryptoAPI。
我主要需要使用给定公钥验证生成的签名的代码。
以下是使用 openssl 完成验证的方式:
那么,我该如何使用 CryptoAPI 来做到这一点?我已经走到这一步了:
此时,我调用:
CryptVerifySignature (hashHdl, sig, sigLen, keyHdl, 0, 0)
此操作失败,错误代码为 ERROR_INVALID_PARAMETER。
奇怪的是,当我第一次不小心将两倍大的公钥存储到 PUBLICKEYBLOB 结构中时,我收到了 NTE_BAD_SIGNATURE 错误。这可能表明现在我传递的公钥是正确的。
为什么现在会出现 ERROR_INVALID_PARAMETER 错误呢?我已经验证哈希值是正确的,并且 key 似乎也被接受。而“sig”参数只是一个指向签名128字节的指针,sigLen为128。
那么,我在这里缺少什么?
最佳答案
好的,经过多次尝试和错误,我解决了这个问题。
签名和公钥数据在采用纯字节字符串形式时都需要反转,即从第一个字节到最后一个位置,依此类推。然后上面的工作就可以了。
关于openssl - CryptoAPI:使用 CryptVerifySignature 使用公钥验证来自 openssl 的签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4926276/
我是一名优秀的程序员,十分优秀!