Как проверить пароль пользователя после хеширования с использованием sha-256 с солью в JavaJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как проверить пароль пользователя после хеширования с использованием sha-256 с солью в Java

Сообщение Anonymous »

Я новичок в Java; а также postgresql, который я использую для серверной части.
Я хочу хешировать пароль пользователя и сохранить его в базе данных с помощью 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»