180 votes

Chaîne de Java à SHA1

Je suis en train de faire une simple chaîne SHA1 convertisseur en Java, et c’est ce que j’ai...

Quand j’ai passer `` , j’obtiens « [une ɹ ?? %l 3 ~. » Je sais que c’est probablement une solution de codage simple comme UTF-8, mais quelqu'un pourrait me dire ce que je dois faire pour obtenir ce que je veux, qui est « 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 » ? Ou j’ai fais cela complètement tort ?

Merci beaucoup !

203voto

Nishant Points 22758

Convertir votre Tableau d'Octets à Chaîne Hexadécimale. Réel Comment vous indique comment.

return byteArrayToHexString(md.digest(convertme))

et (copié à partir du Réel, Comment)

public static String byteArrayToHexString(byte[] b) {
  String result = "";
  for (int i=0; i < b.length; i++) {
    result +=
          Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 );
  }
  return result;
}

BTW, vous pouvez obtenir une représentation plus compacte à l'aide de Base64. Apache Commons Codec API 1.4, a cette belle utilitaire pour enlever tous les douleur. reportez-vous ici

73voto

petrnohejl Points 2483

Il s’agit de ma solution de conversion de chaîne SHA1. Cela fonctionne bien dans mon application Android :

61voto

Jan Schaefer Points 172

À l’aide de classe de hachage de goyave:

36voto

Joachim Sauer Points 133411

SHA-1 (et de tous les autres algorithmes de hachage) de retour des données binaires. Cela signifie que (en Java), ils produisent un byte[]. Qu' byte tableau n'est pas de représenter tous les caractères spécifiques, ce qui signifie que vous ne pouvez pas simplement mettre en String comme vous l'avez fait.

Si vous avez besoin d'un String,, alors vous devez format byte[] d'une manière qui peut être représenté comme un String (sinon, il suffit de garder à l' byte[] environ).

Deux façons de représenter arbitraire byte[] que les caractères imprimables sont BASE64 ou de simples Chaînes de caractères hexadécimaux (c'est à dire représentant chaque byte par deux chiffres hexadécimaux). Il semble que vous essayez de produire un hex-String.

Il y a aussi un autre écueil: si vous voulez obtenir le SHA-1 d'un Java String, alors vous avez besoin de les convertir String d'un byte[] premier (comme l'entrée de l'algorithme SHA-1 byte[] ). Si vous utilisez simplement myString.getBytes() comme vous l'a montré, il utilisera la plate-forme de codage par défaut et en tant que telle va être dépend de l'environnement d'exécution (par exemple, il pourrait revenir de données différentes en fonction de la langue/configuration des paramètres régionaux de votre système d'exploitation).

Une meilleure solution consiste à spécifier l'encodage à utiliser pour l' String-byte[] de conversion comme ceci: myString.getBytes("UTF-8"). Le choix de l'UTF-8 (ou un autre encodage que peut représenter chaque caractère Unicode) est le choix le plus sûr ici.

25voto

DaTroop Points 2006

Il suffit d’utiliser la bibliothèque de codec apache commons. Ils ont une classe utilitaire appelée DigestUtils

Pas besoin d’entrer dans les détails.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X