makdand
Messages postés4Date d'inscriptiondimanche 4 novembre 2007StatutMembreDernière intervention20 novembre 2007
-
6 nov. 2007 à 15:20
verdy_p
Messages postés202Date d'inscriptionvendredi 27 janvier 2006StatutMembreDernière intervention29 janvier 2019
-
25 mars 2009 à 06:32
bonjour,
j'ai écris un code java pour obtenir la valeur hexadécimal de l'application de l'algorithme de hachage MD5. mon problème est qu'on utilisant la classe MessageDigest ce que j'obtient comme clé est un tableau de byte que si je le convertis en String ne me donne pas une chaine hexadécimale.
voila la partie du code ou j'utilise MessageDigest:
public void affiche_mes_hash()
{
System.out.println("affichage des chaines suivies de leurs valeurs de hachage\n");
for(int i= 0;i<table_hash.size();i++)
System.out.println(table_hash.get(i).toString()+"\t"+cles_hash.get(i).toString());}
>>là les clés contiennet des caractères nohexadécimal tq @ ou ]
comment faire pour obtenir des clés hexadécimales?
merci
verdy_p
Messages postés202Date d'inscriptionvendredi 27 janvier 2006StatutMembreDernière intervention29 janvier 2019 25 mars 2009 à 06:32
Où as-tu vu que la conversion d'un tableau de byte en String devait afficher le code hexadécimal ?
Si tu veux de l'hexa, c'est à toi de le faire (avec l'encodage que tu veux), mais la méthode toString() ne le fera pas, elle n'est pas du tout faite pour ça.
En revanche la fonction (statique) suivante fera facilement cette conversion:
// Nécessite l'import de StringBuilder du package utilitaire standard "java.util" du JRE de Java 1.5 et plus.
// Dans Java 1.4 et moins utiliser StringBuffer (équivalent ici mais moins efficace que StringBuilder car StringBuffer est synchronisé, cette synchro étant inutile ici car l'instance est entièrement locale ici à un seul thread, le thred de l'appelant, et disparait en fin de fonction)
public static String toHex(final byte[] in) {
final int len = in.length;
final StringBuilder out = new StringBuilder(len * 2);
for (int i = 0; i < len; i++) {
final byte b = in[i];
out.append(digitToChar((b >> 4) & 15));
out.append(digitToChar(b & 15));
}
return out.toString();
}
//avec cet utilitaire défini dans la même classe:
private static final char digitToChar(final int h) {
return (char)((h <= 9 ? '0' : 'A' - 10) + h);
}