Calcul du Hash d'un XML

Contenu du snippet

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; 

} 


Compatibilité : ASP.NET 2.x

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.