Java calcule le hachage MD5
Dans http://www.anyexample.com/programming/java/java_simple_class_to_compute_md5_hash.xml un exemple est donné de la façon de calculer un hash MD5 de la Chaîne. Il en résulte un 20 chiffres chaîne hexadécimale. Selon http://en.wikipedia.org/wiki/MD5 je m'attends à 32 chiffres chaîne hexadécimale. J'obtiens le même résultat en utilisant par exemple dac2009 réponse dans Comment puis-je générer un hachage MD5?.
Pourquoi dois-je obtenir quelque chose qui ressemble à un hash MD5, mais n'est-ce pas? Je ne peux imaginer que toutes les chaînes que je reçois, je dois pad avec 12 zéros.
Edit: un exemple de code
public static String MungPass(String pass) throws NoSuchAlgorithmException {
MessageDigest m = MessageDigest.getInstance("MD5");
byte[] data = pass.getBytes();
m.update(data,0,data.length);
BigInteger i = new BigInteger(1,m.digest());
return String.format("%1$032X", i);
}
Prises de http://snippets.dzone.com/posts/show/3686
source d'informationauteur AndyAndroid
Vous devez vous connecter pour publier un commentaire.
L'exemple de code est lié, à mon avis, un mauvais code. Il ressemble à l'auteur ne sait pas comment fonctionne un ordinateur. Cependant, il y a beaucoup de meilleurs exemples.
Le dernier exemple est celui que vous recherchez. Chech ce Ideone:
http://ideone.com/ZeN8a
Mise à jour 0: je n'en ai jamais vu cette façon de formater une Chaîne de caractères (
"%1$032X"
), donc je ne sais pas ce qu'il fait. Vous avez besoin de 128 bits pour représenter le hachage MD5 et je vous suggérons d'utiliser letoString(16)
méthode de BigInteger lui-même pour créer une représentation de Chaîne de la BigInteger au lieu d'utiliser ce format.Mise à jour 1: je ne sais plus quel est le problème avec le code fourni. Essayez ceci:
Et si qui produit toujours de la encore de 20 chiffres, essayez de réinstaller Java. Je suis en panne d'inspiration.
utilisation
org.apache.commons.codec.digest.DigestUtils
à la place:cela vous donnera 32 chaîne de char comme un résultat
J'ai essayé votre exemple ci-dessus, MungPass("java") et je suis un 32 chaîne de chiffres,
93f725a07423fe1c889f448b33d21f46. Depuis que vous êtes les 20 premiers de ceux correcte lorsque vous avez exécuté, je devine que vous êtes tout simplement manque quelque chose dans l'imprimé?