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);
}
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:
20
au lieu de 0x20
, lequel est 32
.utilisation org.Apache.commons.codec.digest.DigestUtils
au lieu:
DigestUtils.md5Hex(str);
cela vous donnera une chaîne de 32 caractères à la suite
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?
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);
}
}