Java md5 résultat changeant

Résolu
anix Messages postés 72 Date d'inscription samedi 29 novembre 2003 Statut Membre Dernière intervention 24 octobre 2010 - 14 juin 2010 à 21:02
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre 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

7 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
14 juin 2010 à 21:40
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
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
14 juin 2010 à 22:13
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
3
anix Messages postés 72 Date d'inscription samedi 29 novembre 2003 Statut Membre Dernière intervention 24 octobre 2010
14 juin 2010 à 21:57
merci beaucoup pour la réponse
mais je n'ai pas comprit pourquoi le:
0xFF & md5[i]
0
anix Messages postés 72 Date d'inscription samedi 29 novembre 2003 Statut Membre Dernière intervention 24 octobre 2010
14 juin 2010 à 22:03
aussi autre probléme,
comment convertir le StringBuffer en String

merci pour les réponses
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
anix Messages postés 72 Date d'inscription samedi 29 novembre 2003 Statut Membre Dernière intervention 24 octobre 2010
14 juin 2010 à 22:15
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
0
anix Messages postés 72 Date d'inscription samedi 29 novembre 2003 Statut Membre Dernière intervention 24 octobre 2010
14 juin 2010 à 22:20
bon merci
ça marche maintenant avec le:
String hexS = hexString.toString();
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
14 juin 2010 à 22:22
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
0
Rejoignez-nous