2010-09-09 18 views
2

J'envisage d'utiliser un XML dsig pour les licences d'applications de base. L'application est le code Windows natif (n ° .net). Je peux facilement utiliser .net pour créer un dsig hors ligne, mais je veux le vérifier en C++ natif. D'après ce que j'ai trouvé jusqu'ici MSXML V5 fera l'affaire, mais ne doit pas être utilisé et V6 supprime le support pour dsigs.Comment vérifier la signature numérique XML en C++ natif sans MSXML 5?

Alors, comment puis-je facilement vérifier un code XML produit par le code .net en C++ natif?

+0

XMLDSig est loin d'être une solution optimale pour votre tâche. Même si vous voulez travailler avec des données XML, PKCS # 7 fonctionnera mieux et peut être accompli en utilisant plusieurs bibliothèques cryptographiques commençant par Windows CryptoAPI lui-même. –

+0

Merci. Ce dont j'ai besoin, c'est le guide des mannequins pour la cryptographie. J'ai regardé des tas de libs et d'exemples, mais je n'ai pas trouvé un bon 'voici ce que vous devez savoir'. – Ian

+0

Vous avez raison de ne pas utiliser MSXML5 pour XML dsig natif, étant donné que la DLL est livrée avec Office uniquement, ce qui pose un problème de déploiement, bien que je ne connaisse pas d'autres produits disgés xml natifs populaires. Probablement, vous pouvez tirer parti d'un appel à distance? –

Répondre

2

Malheureusement, XML Signatures comes with MSXML 5.0 only. Le fait est que XML-DSig n'est pas considéré comme une fonctionnalité de MSXML. Il est préférable de considérer MSXML 5.0 comme une branche secondaire - l'étrange frère de MSXML - au lieu d'une partie de la ligne. Ils auraient mieux fait de le nommer en dehors de MSXML pour toute la confusion qu'il a causée. Il n'y a pratiquement aucune documentation pour cela et no way to distribute it. Même l'équipe XML chez Microsoft dit "Don't use it".

Mais tout cela ne vous aide pas. Le vrai problème est que XML Digital Signatures are tricky things. MSXML 5.0 l'a seulement implémenté parce que MS Office avait le contrôle total sur le XML; et à cause de cela, pourrait obtenir des résultats cohérents. Il n'y a aucune garantie qu'une signature XML générée à partir de .NET est interopérable avec MSXML 5.0. Vous pourriez même avoir des résultats incohérents, où cela fonctionne parfois et ne fonctionne pas d'autres fois.

Ce que vous devez faire est d'écrire du code C++ géré où vous pouvez utiliser les mêmes fonctionnalités .NET qui ont généré la signature en premier lieu. Ce n'est pas du C++ natif, mais cela vous donnera des résultats cohérents. La seule autre alternative est de trouver une bibliothèque que vous pouvez utiliser dans .NET et C++ qui peuvent générer une signature numérique.