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

Spawn3107 84 Messages postés mardi 14 décembre 2004Date d'inscription 28 mars 2011 Dernière intervention - 4 nov. 2010 à 09:43 - Dernière réponse : Sehnsucht 107 Messages postés samedi 25 novembre 2000Date d'inscription 4 mai 2013 Dernière intervention
- 5 nov. 2010 à 12:46
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.
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Sehnsucht 107 Messages postés samedi 25 novembre 2000Date d'inscription 4 mai 2013 Dernière intervention - 5 nov. 2010 à 12:46
3
Merci
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 !

Merci Sehnsucht 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de Sehnsucht
Sehnsucht 107 Messages postés samedi 25 novembre 2000Date d'inscription 4 mai 2013 Dernière intervention - 4 nov. 2010 à 15:48
0
Merci
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 !
Commenter la réponse de Sehnsucht
Spawn3107 84 Messages postés mardi 14 décembre 2004Date d'inscription 28 mars 2011 Dernière intervention - 5 nov. 2010 à 11:39
0
Merci
En effet, il fallait changer la longueur du tableau de byte:
Byte[] unicodeText = new Byte[(password.Length * 2) + 1];
Commenter la réponse de Spawn3107

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.