Les Snippets

Connexion

Calcul du Hash d'un XML

Niveau requis pour utiliser/comprendre cette source : 2 ( Initié )
Créé le 12/04/2010 09:35:10 et initié par Warny [Liste]
Vue : 3842
Catégorie(s) : API, Sécurité
Langages dispo pour ce code :
- ASP.NET 2.x



Langage : ASP.NET 2.x
Date ajout : 12/04/2010
Posté par Warny [Liste]

static byte[] HashXml ( XmlElement xe, HashAlgorithm hash ) 

{ 

    XmlDocument xd = new XmlDocument(); 

    xd.LoadXml (xe.OuterXml); 

    return HashXml(xd, hash); 

} 

static byte[] HashXml ( XmlDocument xd, HashAlgorithm hash ) 

{ 

    //Récupération de l'assembly de signature électronique 

    Assembly a = Assembly.Load("System.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"); 

    //Récupère la classe de Hashage 

    Type t = a.GetType("System.Security.Cryptography.Xml.CanonicalXml"); 

    //Récupère le constructeur le plus simple de la classe 

    ConstructorInfo c = t.GetConstructor(
        BindingFlags.Instance | BindingFlags.NonPublic, 
        null, 
        new Type[] { typeof(XmlDocument), typeof(XmlResolver) }, 
        null); 

    //construit l'objet 

    object cx = c.Invoke(new object[] { xd, null }); 

    //calcule le Hash 

    byte[] result = (byte[])t.InvokeMember(
        "GetDigestedBytes",
        BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance, 
        null, 
        cx, 
        new object[] { hash }); 

return result; 

} 

Remarque :
L'utilisation de la fonction est triviale :
WmlDocument xd = ...;
xd.Load(...);
return HashXml(xd, SHA1.Create());

XmlElement xe = xd.SelectSingleNode(...);
return HashXml(xe, SHA1.Create());

PS : Il est bien sûr probable que la version de la dll à charger change avec le framework 4.0.

Snippets en rapport avec : Xml, Reflection, Hash, Signature



Codes sources en rapport avec : Xml, Reflection, Hash, Signature

{C# / C#.NET} CLASSE XMLMAPPER
Pour les besoin d'un projet, j'avais besoin de mapper un XML très complexe sur un objet C#. Le code...

{JAVA / J2EE} JARSIGNER : SIGNEZ VOS ARCHIVES EN UN RIEN DE TEMPS !
Ceux qui se sont essayés à JavaWebStart savent à quel point il peut être pénible de créer des keysto...

{Delphi} XML AU LIEU DES FICHIERS INI (INIFILES)
Bonjour, Voici un très simple Class qui vous facilitera l'utilisation du XML en tant que Fichier INI...

{PHP} VOIR QUI VISITE VOTRE SITE
Bonjour je viens de faire un script php permettant de stocker les visiteurs de votre site, et les af...

{C# / C#.NET} GESTION DE TACHES
Gestionnaire de taches avec possibilités d'afficher des post-it ou non. Inspiré de: http://www.cs...

{C# / C#.NET} OUTIL DE VISUALISATION DE L'INDICE BOURSIER
L’indice boursier est un instrument qui fournit une tendance générale de l’évolution du marché et fa...

{Flash} GALLERIE PHOTO AVEC XML
une galerie d'image pour afficher des téléphones portable je publier la galerie pour que quelqu'un ...

{Flash} PERSONNALISATION DE COMPOSANT ET GESTION XML
Vu que je suis en plein AS3 pour un client et que certain newbees sont vraiment "pas bon", j'ai fait...

{C# / C#.NET} PROJECTMANAGER
Voici une petite application de gestion du temps passe sur vos projets info. Alors en fait, l'idée ...

{C# / C#.NET} FAIRE AVANCER UNE PROGRESSBAR EN FONCTION D'UN NOMBRE DE COMBOBOX REMPLIES
Ce code vous permet de faire avancer une progressbar en fonction du nombre de combobox remplies. Si...