J'essaie de hasch quelques mots de passe avec SHA2.
Où puis-je obtenir un extrait de code Java pour faire cela? P>
J'ai vu ce post mais j'ai quelque chose à manquer: Stockage de mot de passe SHA2 avec Java P>
Mac mac = Mac.getInstance("HmacSha256"); SecretKeySpec secret = new SecretKeySpec(key.getBytes(), "HmacSha256"); mac.init(secret); byte[] shaDigest = mac.doFinal(phrase.getBytes()); String hash = ""; for(byte b:shaDigest) { hash += String.format("%02x",b); }
4 Réponses :
phrase serait le mot de passe que vous essayez de protéger. Touche CODE> est le sel, une chaîne unique (et connue) ajoutée à votre mot de passe avant hachage, pour vaincre les tables arc-en-ciel. Ou il devrait être, au moins. Votre code est juste en train de le prendre à partir du mot de passe lui-même, qui est un peu inutile. Il devrait s'agir d'une longue chaîne aléatoire stockée avec le digest de mot de passe. P>
Vous pouvez envisager d'utiliser la mise en œuvre de Commons-Codec
String hash = org.apache.commons.codec.digest.DigestUtils.sha256Hex(password +"salt");
Ce n'est pas en Java SE
Tout d'abord, vous devez être clair ce que vous voulez faire. Vous dites que vous voulez avoir un mot de passe hachai, mais le code que vous utilisez est pour un Mac ( Code d'authentification de message a>), plus précisément, HMAC .
Les hachages et les MAC sont des choses différentes à des fins différentes ( Bien que le HMAC implique d'utiliser un hachage). Vous devez être sûr que vous utilisez le bon pour votre exigence. P>
La raison à laquelle on vous demande de fournir une clé est que des MAC ont besoin d'une clé. HASHES NE PAS: P>
public byte[] hash(String password) throws NoSuchAlgorithmException { MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); byte[] passBytes = password.getBytes(); byte[] passHash = sha256.digest(passBytes); return passHash; }
J'ai modifié le code d'un petit Rossum, ajouté du sel et convertir le type de retour en chaîne, ajoutez Essayer / Catch, peut-être que cela aidera à une personne:
public String hash(String password) { try { MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); String salt = "some_random_salt"; String passWithSalt = password + salt; byte[] passBytes = passWithSalt.getBytes(); byte[] passHash = sha256.digest(passBytes); StringBuilder sb = new StringBuilder(); for(int i=0; i< passHash.length ;i++) { sb.append(Integer.toString((passHash[i] & 0xff) + 0x100, 16).substring(1)); } String generatedPassword = sb.toString(); return generatedPassword; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; }
FYI: Vous pouvez lire des questions sur le hachage de mot de passe. Bien qu'il soit bon des mots de passe de hasch, il est non trivial de le faire correctement. Cette question a de bonnes réponses: Suggestions pour les mots de passe de la bibliothèque à hachage de Java < / a>