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.