Java md5 résultat changeant [Résolu]

Messages postés
72
Date d'inscription
samedi 29 novembre 2003
Statut
Membre
Dernière intervention
24 octobre 2010
- - Dernière réponse : cs_DARKSIDIOUS
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
- 14 juin 2010 à 22:22
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
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
81
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 196 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
81
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 196 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Messages postés
72
Date d'inscription
samedi 29 novembre 2003
Statut
Membre
Dernière intervention
24 octobre 2010
0
Merci
merci beaucoup pour la réponse
mais je n'ai pas comprit pourquoi le:
0xFF & md5[i]
Commenter la réponse de anix
Messages postés
72
Date d'inscription
samedi 29 novembre 2003
Statut
Membre
Dernière intervention
24 octobre 2010
0
Merci
aussi autre probléme,
comment convertir le StringBuffer en String

merci pour les réponses
Commenter la réponse de anix
Messages postés
72
Date d'inscription
samedi 29 novembre 2003
Statut
Membre
Dernière intervention
24 octobre 2010
0
Merci
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
Commenter la réponse de anix
Messages postés
72
Date d'inscription
samedi 29 novembre 2003
Statut
Membre
Dernière intervention
24 octobre 2010
0
Merci
bon merci
ça marche maintenant avec le:
String hexS = hexString.toString();
Commenter la réponse de anix
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
81
0
Merci
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
Commenter la réponse de cs_DARKSIDIOUS