Cryptage md5 en c# et en VB [Résolu]

Signaler
Messages postés
84
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
28 mars 2011
-
Messages postés
107
Date d'inscription
samedi 25 novembre 2000
Statut
Membre
Dernière intervention
4 mai 2013
-
Bonjour tout le monde,

j'ai un petit soucis dans une communication entre deux programmes.

D'un côté j'ai un programme en vb qui me crypte un mot de passe en md5 :

Private Function CalculateMD5Hash(ByVal password As String) As String
        Dim encoder As Encoder
        Dim unicodeText() As Byte
        Dim md5 As MD5CryptoServiceProvider
        Dim result() As Byte
        Dim builder As StringBuilder

        encoder = System.Text.Encoding.Unicode.GetEncoder()

        ReDim unicodeText(password.Length * 2)

        encoder.GetBytes(password.ToCharArray(), 0, password.Length, unicodeText, 0, True)

        md5 = New MD5CryptoServiceProvider()
        result = md5.ComputeHash(unicodeText)

        builder = New StringBuilder()
        For i As Integer = 0 To result.Length - 1
            builder.Append(result(i).ToString("X2"))
        Next

        Return builder.ToString()
    End Function



De l'autre côté, j'ai un programme en C# qui reçoit cette chaîne de caractère cryptée. Seulement, si je prend la même chaîne de caractère, je n'ai pas le même résultat.

Fonction C#:

private string GetMD5Hash(string str)
        {
            Encoder enc = System.Text.Encoding.Unicode.GetEncoder();

            byte[] unicodeText = new byte[str.Length * 2];
            enc.GetBytes(str.ToCharArray(), 0, str.Length, unicodeText, 0, true);

            MD5 md5 = new MD5CryptoServiceProvider();

            byte[] result = md5.ComputeHash(unicodeText);

            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < result.Length; i++)
            {
                sb.Append(result[i].ToString("X2"));
            }
            return sb.ToString();
        }


Est-ce que c'est possible que le hash des deux fonctions retournent un résultat différent sur une même chaîne de caractère ??


Merci.

3 réponses

Messages postés
107
Date d'inscription
samedi 25 novembre 2000
Statut
Membre
Dernière intervention
4 mai 2013

Bonjour,

En fait ça serait plutôt le contraire, "réduire" de 1 la taille du tableau VB.Net. Là dans les deux cas tu auras une case de tableau vide qui sera hashée et donc faussera le résultat même s'il sera identique entre tes deux versions

Pour t'en convaincre compare tes résultats avec ce que tu obtiens par exemple sur ce site MD5 Generator

Après c'est peut-être souhaité comme comportement :D

Cordialement !
Messages postés
107
Date d'inscription
samedi 25 novembre 2000
Statut
Membre
Dernière intervention
4 mai 2013

Bonjour,

Que le hash retourne deux valeurs différentes pour une même chaîne, j'en doute ; par contre qu'il retourne deux hash différents pour deux chaînes différentes c'est déjà plus probable étant donné que c'est ce qu'il se passe ici...

Pour déclarer un tableau de taille N (et donc d'indice maximal N-1) il faut faire
byte[] myArray = new byte[N];

Dim myArray As Byte() = New Byte(N - 1) {}


Ainsi dans les deux cas tu ne haches pas la même "chaîne" convertie en binaire.

Après je n'ai pas vérifié plus que cela, mais j'ai vu ce détail qui m'a sauté aux yeux, j'espère que cela règlera ton souci.

Cordialement !
Messages postés
84
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
28 mars 2011

En effet, il fallait changer la longueur du tableau de byte:
Byte[] unicodeText = new Byte[(password.Length * 2) + 1];