2017-05-16 4 views
2

Je fais appel MessageDigest.digest() méthode pour obtenir le hachage du mot de passe. Si le mot de passe contient un caractère norvégien, par ex. 'ø', cette méthode renvoie le même hachage pour différentes chaînes avec un dernier caractère différent. "Høstname1" et "Høstname2" ont même hachage, mais "Hostnøme1" aura un hachage différent comme 'ø' emplacement est différent. C'est avec l'encodage "utf-8". Pour l'encodage "iso-8859-1", je ne vois pas ce problème. Est-ce un problème connu ou ai-je oublié quelque chose ici?MessageDigest.digest() retournant même hachage pour les différentes chaînes ayant un caractère norvégien

Ceci est mon code:

import java.security.MessageDigest; 

    String password = "Høstname1"; 
    String salt = "6"; 

    MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); 
    byte[] hash = new byte[40]; 
    messageDigest.update(salt.getBytes("utf-8"), 0, salt.length()); 
    messageDigest.update(password.getBytes("utf-8"), 0, password.length()); 
    hash = messageDigest.digest(); 
+0

Juste une supposition, mais il pourrait avoir quelque chose à voir avec l'encodage de votre sourcefile et le codage du jeu pour le compilateur. –

Répondre

0

Vous ne devriez pas passer la longueur de la chaîne à messageDigest.update

messageDigest.update(password.getBytes("utf-8"), 0, password.length()); 

mais la longueur du tableau d'octets depuis le codage UTF-8 chaîne a généralement plus d'octets que le nombre de caractères dans la chaîne:

byte[] pwd = password.getBytes("utf-8"); 
messageDigest.update(pwd, 0, pwd.length); 

ou encore plus court (merci @ Matt)

messageDigest.update(password.getBytes("utf-8")); 

Même chose pour salt.

donc votre code n'a été hachage début du mot de passe.

+0

Merci, ça marche maintenant. Je me demandais pourquoi travaillait plus tôt avec tous les caractères anglais. – namang029

+0

@ namang029 si tous les caractères du mot de passe sont <128 puis 'password.getBytes ("utf-8") de longueur. == password.length()' si vous ne l'avez pas remarqué le bug – wero

+0

@ namang029 utilisent la surcharge sans longueur de sorte que vous n'avez pas à vous soucier de savoir si vous faites cette erreur ou non –