我们如何在 C++ 和 windows API 中验证 openssl 数字签名

Posted

技术标签:

【中文标题】我们如何在 C++ 和 windows API 中验证 openssl 数字签名【英文标题】:How we can verify openssl digital signature in C++ & windows API 【发布时间】:2011-10-09 07:12:56 【问题描述】:

使用 openssl 我在服务器上创建了签名文档, 请参考下面的命令。

------创建私钥。

openssl pkcs12 -in "D:\Cummins Issues\XML  Encryption\mycredentialsandkey2010.pfx"  -nodes -nocerts -out "D:\privatekey.pem" -nodes

-----创建公钥。

openssl rsa -in "D:\privatekey.pem" -pubout -out "D:\rsapublickey.pem"

------创建签名文档。

openssl dgst -sha1 -sign "D:\privatekey.pem" -out "D:\ProductInformation_xml.cipher" "D:\ProductInformation.xml"

现在我可以使用如下所示的 opensll 验证数字签名

---验证

openssl dgst -sha1 -verify "D:\rsapublickey.pem" -signature "D:\ProductInformation_xml.cipher" "D:\ProductInformation.xml"

但我需要在客户端应用程序中使用 C++ 和 Windows API 验证数字签名(没有 openssl 库或源代码)。我知道使用公钥和哈希我们可以验证数字签名。请尽快提供伪代码或 windows API。

感谢任何帮助。

【问题讨论】:

这是图书馆的目的,而不是重新发明***。如果不能使用 openssl 或 crypto++ 或 Botan,那么您将不得不实现自己的算法。另请注意,使用这些库中的任何一个静态编译您的客户端都不会在您的客户端中包含整个库,仅包含您使用的库。 【参考方案1】:

为什么不能使用 libssl?这是明显的下降路线。算法本身是 RSA 和 SHA1,尽管你真的不应该尝试自己动手。

谷歌搜索“microsoft ssl library”只会产生大量漏洞。不,真的!

【讨论】:

【参考方案2】:

Microsoft 的 CryptoAPI 将允许您签署和验证数据。

您应该注意,Microsoft 从 Windows vista 开始引入了CNG。因此,请评估您的要求。

您可以使用 CryptoAPI 从MSDN 找到用于签名和验证的示例源

【讨论】:

以上是关于我们如何在 C++ 和 windows API 中验证 openssl 数字签名的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中使用 Windows API 隐藏桌面图标?

C++ Windows API - 如何检索字体缩放百分比

如何使用 Windows 运行时使用 C# 实现 C++ API?

在运行时在 c++ Windows API 中调整窗口大小?

Windows C++ API:如何将整个二进制文件读入缓冲区?

用windows API 编写一个C++窗口