Calculer l'empreinte MD5
Pour trouver la représentation MD5 d'un texte, on peut utiliser la librairie MessageDigest inclue dans JAVA. La fonction de hashage stocke l'empreinte dans un tableau de byte. Pour rendre le MD5 compréhensible, une boucle a été ajoutée à la class pour obtenir une représentation hexadecimal du Digest.
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Calculer une empreinte MD5 d'un string
* http://www.fobec.com/java/985/calculer-digest-md5-string.html
* Axel 2010
*/
public class HashUtils {
public static String MD5(String text) throws NoSuchAlgorithmException {
byte[] toHash = text.getBytes();
byte[] MD5Digest = null;
StringBuilder hashString = new StringBuilder();
//Calculer le MD5
MessageDigest algo = MessageDigest.getInstance("MD5");
algo.reset();
algo.update(toHash);
MD5Digest = algo.digest();
//Créer un représentation hexadecimal du Digest
for (int i = 0; i < MD5Digest.length; i++) {
String hex = Integer.toHexString(MD5Digest[i]);
if (hex.length() == 1) {
hashString.append('0');
hashString.append(hex.charAt(hex.length() - 1));
} else {
hashString.append(hex.substring(hex.length() - 2));
}
}
return hashString.toString();
}
/**
* Exemple de hashage MD5
* @param args
*/
public static void main(String[] args) {
try {
String phrase = "Hello world !";
System.out.println("texte à encoder: " + phrase);
System.out.println("MD5: " + HashUtils.MD5(phrase));
} catch (NoSuchAlgorithmException ex) {
Logger.getLogger(HashUtils.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Le hashage MD5 est principalement connu pour convertir les mots de passe en une empreinte que l'on stocke dans la base de donnée. Un autre utilisation de l'algo est la comparaison de texte. En effet, bien que plusieurs textes peuvent produire la meme empreinte MD5, le hashage est utilisé pour améliorer les performances des algo de tri.