Flow Group SASFlow Group
L'erp des Processus Relationnels
Systeme d'Information – Audit Industriel
> Accueil > Expertises & Savoirs > Articles techniques
<div class="infotip"><b>Espace client&#160;:</b> <a href="login.aspx">suivez ce lien</a> pour entrer dans l'espace qui vous est réservé.</div>

Articles technique


Implémentation de MD5 en C# avec le Compact Framework sur PocketPC

read the English version English version

Utilisation des classes MD5 et MD5CryptoServiceProvider
Programme de test
Résultat
Quelques liens utiles...
Historique de révisions...

Comme les classes d'encryption ne sont pas disponible sur le Compact Framework 1.0, nous avons porté le "MD5 Message-Digest Algorithm" de RSA Data Security, Inc. en C#.

Ces classes sont supportées par le Compact Framework 2.0

Utilisation des classes MD5 et MD5CryptoServiceProvider

Avec le .Net Framework, on calcule le MD5 d'un buffer de la façon suivante :

using System; using System.Text; using System.Security.Cryptography; ... byte[] ComputeMD5(byte[] buffer) { //Create the md5 hash provider. MD5 md = new MD5CryptoServiceProvider(); //Compute the hash value from the array of bytes. return md.ComputeHash(buffer); } ...

Nous avons implémenté ces deux classes pour le compact framework en tachant de respecter leur signature. Ainsi, on peut utiliser le même code simplement en changeant de using.

using System; using System.Text; //using System.Security.Cryptography; using FlowGroup.Crypto; ... byte[] ComputeMD5(byte[] buffer) { //Create the md5 hash provider. MD5 md = new MD5CryptoServiceProvider(); //Compute the hash value from the array of bytes. return md.ComputeHash(buffer); } ...
Pour information

Nous pouvions aussi utiliser les méthodes suivantes pour obtenir l'algorithme de hachage :

  • MD5 md = MD5.Create();
  • MD5 md = MD5.Create("MD5");

Mais, la classe HashAlgorithm n'existe pas non plus, et que nous ne l'avons pas redéfinie, la méthode suivante ne marche pas :

  • HashAlgorithm md = HashAlgorithm.Create("MD5");

Programme de test

Comme le code de l'implémentation est disponible en téléchargement ici, nous présentons à titre d'exmple d'utilisation le code de test de la RFC 1321.

using System; using System.Text; using FlowGroup.Crypto; namespace DemoMD5 { /// <summary> /// Summary description for Application. /// </summary> class Application { static private void MDString(string s) { MD5 md = MD5.Create(); byte[] hash; //Create a new instance of ASCIIEncoding to //convert the string into an array of Unicode bytes. ASCIIEncoding enc = new ASCIIEncoding(); //Convert the string into an array of bytes. byte[] buffer = enc.GetBytes(s); //Create the hash value from the array of bytes. hash = md.ComputeHash(buffer); //Display the hash value to the console. Console.Write("MD5 (\"{0}\") = ", s); foreach(byte b in hash) { Console.Write(b.ToString("x2")); } Console.WriteLine(""); } /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main(string[] args) { Console.WriteLine("MD5 test suite:"); MDString(""); MDString("a"); MDString("abc"); MDString("message digest"); MDString("abcdefghijklmnopqrstuvwxyz"); MDString("ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789"); MDString("123456789012345678901234567890" + "123456789012345678901234567890" + "12345678901234567890"); } } }

Résultat

En exécutant le programme, nous obtenons la sortie suivante, conforme à la RFC 1321 :

MD5 test suite:¶
MD5 ("") = d41d8cd98f00b204e9800998ecf8427e¶
MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661¶
MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72¶
MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0¶
MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b¶
MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = 
d174ab98d277d9f5a5611c2c9f419d9f¶
MD5 ("123456789012345678901234567890123456789012345678901234567890123456
78901234567890") = 57edf4a22be3c955ac49da2e2107b67a¶

Quelques liens utiles...

Historique de révisions...

daterévision
29/12/2005 00:00Ajout de l'implémentation des méthodes :
  • public byte[] ComputeHash(Stream inputStream)
  • public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset)
  • public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount)
Correction de HashCore pour lui permettre d'être appellée plusieurs fois.

les informations fournies ici le sont en tant que telles, sans aucune garantie d'aucune sorte.
© 2022 Flow Group SAS - Flow Group est une marque déposée de GL Conseil SA.