I'm trying to hash some passwords with SHA2.
Where can I get a snippet of java code for make that?
I have seen that post but I have something missing: SHA2 password storage with Java
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);
}
The phrase is the String I want encode right? And what is the key (line 2)
Thanks in advance
you may consider using commons-codec's implementation
Phrase would be the password that you're trying to protect.
key
is the salt, a unique (and known) string appended to your password before hashing, to defeat rainbow tables. Or it should be, at least. Your code is just taking it from the password itself, which is kind of pointless. It should be a long random string that is stored together with the password digest.I modified a little rossum's code, added salt and convert returning type to String, add try/catch, maybe it will help to someone:
First, you need to be clear what it is you want to do. You say you want to hash a password, but the code you are using is for a MAC (Message Authentication Code), specifically, HMAC.
Hashes and MACs are different things for different purposes (though HMAC does involve using a hash). You need to be sure you are using the right one for your requirement.
The reason you are being asked to supply a key is because MACs need a key. Hashes do not: