2010-09-09 3 views
2

Я рассматриваю использование XML dsig для базового лицензирования приложений. Приложение - это собственный код Windows (нет .net). Я могу легко использовать .net для создания dsig в ​​автономном режиме, но затем я хочу проверить его в native C++. Из того, что я нашел до сих пор, MSXML V5 выполнит эту работу, но не будет использоваться, а V6 удалит поддержку для dsigs.Как проверить цифровую подпись XML на языке C++ без MSXML 5?

Итак, как я могу легко проверить XML-dsig, созданный кодом .net в native C++?

+0

XMLDSig далеко от оптимального решения для вашей задачи. Даже если вы хотите работать с данными XML, PKCS # 7 будет работать лучше и может быть выполнен с использованием нескольких криптографических библиотек, начиная с самого Windows CryptoAPI. –

+0

Спасибо. Что мне нужно, это руководство по манекенам для криптографии. Я просмотрел множество библиотек и примеров, но я не нашел хорошего «вот что вам нужно знать». – Ian

+0

Вы правы, чтобы не использовать MSXML5 для родного XML-dsig, поскольку DLL поставляется с Office только потому, что у вас возникнет проблема с развертыванием, хотя я не знаю других популярных собственных продуктов xml disg. Возможно, вы можете использовать удаленный вызов? –

ответ

2

К сожалению, XML Signatures comes with MSXML 5.0 only. Дело в том, что XML-DSig на самом деле не считается особенностью MSXML. Лучше всего считать MSXML 5.0 ответвлением - странным братом шага MSXML - вместо части линии. Им было бы лучше называть его чем-то, кроме MSXML, для всех путаниц, которые он вызвал. Для него почти нет документации и no way to distribute it. Даже команда XML в Microsoft говорит «Don't use it».

Но все, что вам не поможет. Реальная проблема заключается в том, что XML Digital Signatures are tricky things. MSXML 5.0 реализовал его только потому, что MS Office полностью контролировал XML; и из-за этого могут получить согласованные результаты. Нет никакой гарантии, что подпись XML, созданная с .NET, совместима с MSXML 5.0. Возможно, у вас могут быть непоследовательные результаты, когда они работают иногда и не работают в других случаях.

Что вам нужно сделать, это написать управляемый код на C++, где вы можете использовать те же функции .NET, которые сгенерировали подпись в первую очередь. Это не родной C++, но он даст вам последовательные результаты. Единственная альтернатива - найти библиотеку, которую вы можете использовать как на .NET, так и на C++, которая может генерировать цифровую подпись.