1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| package com.utils; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.Base64;
public class SaltedHash {
public static String hashPassword(String password) { byte[] salt = generateSalt(16);
MessageDigest md = null; try { md = MessageDigest.getInstance("SHA-256"); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } md.update(salt); md.update(password.getBytes()); byte[] hashedPassword = md.digest();
return Base64.getEncoder().encodeToString(salt) + ":" + Base64.getEncoder().encodeToString(hashedPassword); }
private static byte[] generateSalt(int length) { SecureRandom sr = new SecureRandom(); byte[] salt = new byte[length]; sr.nextBytes(salt); return salt; }
public static boolean verifyPassword(String inputPassword, String storedSaltedHashedPassword) { String[] parts = storedSaltedHashedPassword.split(":"); byte[] salt = Base64.getDecoder().decode(parts[0]); String storedHashedPassword = parts[1];
String hashedInputPassword = null; hashedInputPassword = hashPasswordWithSalt(inputPassword, salt);
return storedHashedPassword.equals(hashedInputPassword); }
private static String hashPasswordWithSalt(String password, byte[] salt) { MessageDigest md = null; try { md = MessageDigest.getInstance("SHA-256"); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } md.update(salt); md.update(password.getBytes()); byte[] hashedPassword = md.digest(); return Base64.getEncoder().encodeToString(hashedPassword); }
public static void main(String[] args) { String password = "123456";
String saltedHashedPassword = hashPassword(password); System.out.println("Salted Hashed Password: " + saltedHashedPassword);
String passwordToVerify = "123456"; boolean isPasswordValid = verifyPassword(passwordToVerify, saltedHashedPassword); System.out.println("Password verification: " + isPasswordValid);
String wrongPassword = "wrongPassword"; boolean isWrongPasswordValid = verifyPassword(wrongPassword, saltedHashedPassword); System.out.println("Wrong password verification: " + isWrongPasswordValid);
} }
|