【问题标题】:How to verify XML Digital Signature in native C++ without MSXML 5?如何在没有 MSXML 5 的情况下验证本机 C++ 中的 XML 数字签名?
【发布时间】:2010-09-09 15:20:47
【问题描述】:

我正在考虑将 XML dsig 用于基本应用许可。该应用程序是本机 Windows 代码(没有 .net)。我可以轻松地使用 .net 离线创建 dsig,但我想在本机 C++ 中验证它。从我目前发现的情况来看,MSXML V5 可以完成这项工作,但不能使用,而且 V6 删除了对 dsigs 的支持。

那么我怎样才能轻松地验证由.net 代码在本机 C++ 中生成的 XML dsig?

【问题讨论】:

  • XMLDSig 远非您的任务的最佳解决方案。即使您想使用 XML 数据,PKCS#7 也会更好地工作,并且可以使用从 Windows CryptoAPI 本身开始的多个加密库来完成。
  • 谢谢。我需要的是密码学的傻瓜指南。我查看了大量的库和示例,但我没有找到一个好的“这是你需要知道的”。
  • 您不对本机 XML dsig 使用 MSXML5,因为 DLL 仅随 Office 提供,因此您将遇到部署问题,尽管我不知道其他流行的本机 xml disg 产品。也许您可以利用远程呼叫?

标签: c++ xml digital-signature msxml xml-signature


【解决方案1】:

很遗憾,XML Signatures comes with MSXML 5.0 only。问题是 XML-DSig 实际上并不被认为是 MSXML 的一个特性。最好将 MSXML 5.0 视为一个分支 - MSXML 的奇怪的继兄弟 - 而不是该系列的一部分。他们最好把它命名为除了 MSXML 之外的东西,因为它引起的所有混乱。它和no way to distribute it 几乎没有任何文档。甚至微软的 XML 团队也说“Don't use it”。

但这一切都对你没有帮助。真正的问题是XML Digital Signatures are tricky things。 MSXML 5.0 只实现了它,因为 MS Office 完全控制了 XML;因此,可以获得一致的结果。无法保证从 .NET 生成的 XML 签名可与 MSXML 5.0 互操作。您甚至可能会得到不一致的结果,有时会奏效,有时却不起作用。

您需要做的是编写托管 C++ 代码,您可以在其中使用最初生成签名的相同 .NET 功能。它不是本机 C++,但它会给你带来一致的结果。唯一的另一种选择是找到一个可以在 .NET 和 C++ 中使用的库,它可以生成数字签名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    相关资源
    最近更新 更多