Java md5 résultat changeant [Résolu]

Signaler
Messages postés
72
Date d'inscription
samedi 29 novembre 2003
Statut
Membre
Dernière intervention
24 octobre 2010
-
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
-
bonjour;

pourquoi ce code
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(passwd1.getBytes());
byte[] md5 = md.digest();
String md5S = md5.toString();
System.out.println("md5S = "+md5S);
donne à chaque éxécution un résultat différent pour la même valeur de passwd1, est-ce que c'est logique
comment y remédier

merci

7 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
100
Salut,

Forcément, vu que ton md5.toString() ne te renvoie pas le contenu de ton tableau mais l'adresse mémoire de celui-ci !

Il faut que tu récupères les caractères Byte par Byte pour construire ta chaîne :
md = MessageDigest.getInstance("MD5");

md.update("test".getBytes()); 
byte[] md5 = md.digest(); 
StringBuffer hexString = new StringBuffer();
for (int i=0;i<md5.length;i++) {
hexString.append(Integer.toHexString(0xFF & md5[i]));
}
System.out.println(hexString);

______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
100
Salut,

StringBuffer.toString() tout simplement.

Pour le 0xFF je te laisse aller voir cecipour ta culture personnelle.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
72
Date d'inscription
samedi 29 novembre 2003
Statut
Membre
Dernière intervention
24 octobre 2010

merci beaucoup pour la réponse
mais je n'ai pas comprit pourquoi le:
0xFF & md5[i]
Messages postés
72
Date d'inscription
samedi 29 novembre 2003
Statut
Membre
Dernière intervention
24 octobre 2010

aussi autre probléme,
comment convertir le StringBuffer en String

merci pour les réponses
Messages postés
72
Date d'inscription
samedi 29 novembre 2003
Statut
Membre
Dernière intervention
24 octobre 2010

bon,
j'ai fait une conversion de String à StringBuffer (charactére par charactére)
le probléme maintenant est que le equals entre deux StringBuffer de même valeur ne marche pas
voila le code:
for (int i=0;i<password.length();i++) {
hexString1.append(password.charAt(i));
}

System.out.println("hexString1 = "+hexString1);


//correct = password.equals(hexString);
correct = hexString.equals(hexString1);

merci
Messages postés
72
Date d'inscription
samedi 29 novembre 2003
Statut
Membre
Dernière intervention
24 octobre 2010

bon merci
ça marche maintenant avec le:
String hexS = hexString.toString();
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
100
Salut,

Normal : il ne faut pas comparer le mot de passe avec le hash md5, mais le hash md5 du mot de passe avec le hash préalablement calculé :

hashMd5DeToto = "DA1247D578C54B124A4578D"; // Disons que le hash md5 de "toto" est cà
!"toto".equals(hashMd5DeToto); // tu vois bien que hashMd5DeToto n'est pas égal à "toto"...
nouveauHashMd5DeTotoNouvellementSaisit = "DA1247D578C54B124A4578D"; // là bien sûr, tu doit recalculer le hash md5 du mot de passe saisit, ce qui te donnera le même hash md5 que celui calculé précédemment
nouveauHashMd5DeTotoNouvellementSaisit.equals(hashMd5DeToto);

______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement