Я хочу хешировать пароль пользователя и сохранить его в базе данных с помощью sha-256.
В следующий раз, когда пользователь зайдет, я хочу сравнить отправленный пользователем пароль с сохраненным хеш-паролем «на конце Java».
Я попробовал это (я получил из Интернета):
Код: Выделить всё
private static String get_SHA_512_SecurePassword(String passwordToHash, byte[] salt) {
String generatedPassword = null;
try {
MessageDigest md = MessageDigest.getInstance("SHA-512");
md.update(salt);
byte[] bytes = md.digest(passwordToHash.getBytes());
StringBuilder sb = new StringBuilder();
for(int i=0; i< bytes.length ;i++)
{
sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
}
generatedPassword = sb.toString();
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
return generatedPassword;
}
private static byte[] getSalt() throws NoSuchAlgorithmException {
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
byte[] salt = new byte[16];
sr.nextBytes(salt);
return salt;
}
public static void main(String[] args) {
//do some things ....
System.out.println("\nEnter your password");
String password = scanner.nextLine();
try {
byte[] salt = getSalt();
securePassword = get_SHA_512_SecurePassword(password, salt); // This is saved in the database.
System.out.println(securePassword);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
//Now ask user to enter his password
System.out.println("Enter your password");
String password1 = scanner.nextLine();
//validate user password. Compare password with password1
try {
byte[] salt = getSalt();
securePassword1 = get_SHA_512_SecurePassword(password1, salt);
System.out.println(securePassword1);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
//I believe this is wrong but I don't have alternative
if (securePassword.equals(securePassword1)) {
System.out.println("Both are equal");
} else {
System.out.println("Both are not equal");
}
}
Результат один и тот же: «Оба не равны», независимо от того, одинаковые или разные оба пароля.
Итак, существует ли метод проверки пароля пользователя? Я искал. Решение, которое я получил, - использовать Spring Bcript, который мне сейчас не нужен.
Другая альтернатива, которую я продвигаю в будущем, - это выполнять проверку на бэкэнде (как это происходит с php-Mysqli pass_verify($password, $passwodhashed)). Причина в том, что я использую postgresql с Java, которые для меня новы.
Спасибо
Подробнее здесь: https://stackoverflow.com/questions/697 ... ed-in-java
Мобильная версия