如何在没有MSXML 5的情况下在本机C ++中验证XML数字签名?

时间:2010-09-09 15:20:47

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

我正在考虑使用XML dsig进行基本的应用许可。该应用程序是本机Windows代码(无.net)。我可以轻松地使用.net离线创建一个dsig,但后来我想在本机c ++中验证它。从我到目前为止发现的MSXML V5将完成这项工作,但不能使用,V6删除了对dsigs的支持。

那么如何在本机C ++中轻松验证.net代码生成的XML dsig?

1 个答案:

答案 0 :(得分:2)

不幸的是,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 ++中使用的库,它可以生成数字签名。