Кодировщик паролей, обновление пароля, посмотреть, новый ли старый - PullRequest
0 голосов
/ 10 декабря 2018

Есть ли способ сравнить простой текстовый пароль с зашифрованным паролем, чтобы узнать, совпадают ли они?

Это с использованием:

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

BCrypt является базовой службой, но интерфейс - PasswordEncoder.

Скажите, что у пользователя есть пароль 123, пользователь отправляет запрос на обновлениеих пароль, но новый пароль также 123. Есть ли способ проверить на стороне сервера, совпадают ли новый и текущий пароль?

  if (encoder.matches(newPasswordPlainText, oldPasswordEncrypted)) {
    return false;
  }

Кажется, что не работает

Я использую BCrypt в качестве кодировщика.

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Единственный способ, который дала пружина:

encoder.matches(newPasswordPlainText, oldPasswordEncrypted)

для BcryptPasswordEncoder

И он должен работать

0 голосов
/ 10 декабря 2018

По сути, для генерации хеша BCryptPasswordEncoder требуется необработанный пароль (1), соль (2) и количество раундов (3).Последние два можно определить по закодированному паролю.Это облегчает создание того же хэша.Следовательно, нет проблем с сопоставлением необработанного пароля с зашифрованным.

BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();

for (int i = 0; i < 10; ++i) {
    String encodedPassword = encoder.encode("123");
    System.out.println(encodedPassword + " " + encoder.matches("123", encodedPassword));
}

Этот фрагмент дает вам различные хэши, но во всех случаях true для encoder.matches("123", hashOf123):

$2a$10$.KLpQ8ESFuWo.lNMN.J3QeUPM2sl5PrGZ1PNortSIUaRxs4T4sN.6 true
$2a$10$Fl7QAFiYKYDcnW28Rg8mMOrrCSIz9eLAkJ2kokXs2LVyV9C1GYJM. true
...
$2a$10$qTXWvu0jEf7kM8DF7HD.fu0qu.kFJID8OmlXLm/6XJUJdA1Dje4vq true

Убедитесь, что пароль, хранящийся в базе данных, был закодирован тем же алгоритмом (и той же версией), который вы используете для сравнения.В противном случае вы можете получить исключение или неверный результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...