web-dev-qa-db-fra.com

Java calculer le hachage MD5

Dans http://www.anyexample.com/programming/Java/java_simple_class_to_compute_md5_hash.xml un exemple est donné sur la façon de calculer un hachage MD5 de String. Il en résulte une chaîne hexadécimale à 20 chiffres. Selon http://en.wikipedia.org/wiki/MD5 je m'attendrais à une chaîne hexadécimale à 32 chiffres. J'obtiens le même résultat par exemple en utilisant la réponse dac2009 dans Comment puis-je générer un hachage MD5? .

Pourquoi est-ce que j'obtiens quelque chose qui ressemble à un hachage MD5 mais qui ne l'est pas? Je ne peux pas imaginer que toutes les cordes que je reçois doivent être remplies avec 12 zéros en tête.

Modifier: 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);
}

Tiré de http://snippets.dzone.com/posts/show/3686

13
AndyAndroid

Vous devez manquer quelque chose. Le code lié est très bien. Assurez-vous que le problème n'est nulle part ailleurs, lié à l'affichage du résultat. Possibilités:

  • dans une interface graphique trop petite
  • dans une console avec des problèmes de multithreading
  • sur un package réseau qui sera bientôt coupé
  • vous coupez la longueur à 20 au lieu de 0x20, lequel est 32.
4
Martijn Courteaux

utilisation org.Apache.commons.codec.digest.DigestUtils au lieu:

DigestUtils.md5Hex(str);

cela vous donnera une chaîne de 32 caractères à la suite

46
tsds

J'ai essayé votre exemple ci-dessus, MungPass ("Java") et j'ai obtenu une chaîne de 32 chiffres, 93f725a07423fe1c889f448b33d21f46. Puisque vous avez obtenu les 20 premiers corrects lorsque vous avez couru, je suppose que vous manquez simplement quelque chose dans l'impression?

1
dac2009

Vous pouvez utiliser DatatypeConverter.printHexBinary (digiest) pour obtenir le hachage 128 bits représenté par 32 nombres hexadécimaux. Voici l'extrait de code complet pour générer le hachage MD5 en Java,

import Java.security.MessageDigest;
import Java.security.NoSuchAlgorithmException;
import javax.xml.bind.DatatypeConverter;

public class MD5HashGenerator 
{

public static void main(String args[]) throws NoSuchAlgorithmException
{
    String stringToHash = "MyJavaCode"; 
    MessageDigest messageDigest = MessageDigest.getInstance("MD5");
    messageDigest.update(stringToHash.getBytes());
    byte[] digiest = messageDigest.digest();
    String hashedOutput = DatatypeConverter.printHexBinary(digiest);
    System.out.println(hashedOutput);
}
}
1
Prasanna L M