Spawn3107
Messages postés84Date d'inscriptionmardi 14 décembre 2004StatutMembreDernière intervention28 mars 2011
-
4 nov. 2010 à 09:43
Sehnsucht
Messages postés107Date d'inscriptionsamedi 25 novembre 2000StatutMembreDernière intervention 4 mai 2013
-
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 ??
Sehnsucht
Messages postés107Date d'inscriptionsamedi 25 novembre 2000StatutMembreDernière intervention 4 mai 2013 5 nov. 2010 à 12:46
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
Sehnsucht
Messages postés107Date d'inscriptionsamedi 25 novembre 2000StatutMembreDernière intervention 4 mai 2013 4 nov. 2010 à 15:48
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.