Каким криптоалгоритмом или хэш функцией зашифрован пароль в JMIX?

Вот такой метод что бы сделать аутентификацию пользователя по номеру телефона и паролю.
Из БД пользователя извлекаю, но аутентификацию не проходит. Видимо хэш какой то используется иной.

import org.springframework.security.crypto.password.PasswordEncoder;

@Authenticated
@ManagedOperation
public boolean isAuth(String phoneNumber, String password) {
    String encodedPassword = passwordEncoder.encode(password);
    User user = userRepository.getUserByPhone(phoneNumber);
    if (user != null) {
        if (encodedPassword.equals(user.getPassword())) {
            return true;
        } else {
            log.info(encodedPassword);
            log.info(user.getPassword());
        }
    }
    return false;
}

Добрый день!

SecurityAutoConfiguration создаёт DelegatingPasswordEncoder, который по умолчанию использует bcrypt. Префикс также можно посмотреть в БД, он сохраняется перед самим паролем.

попробовал использовать DelegatingPasswordEncoder.
Все равно разные хэши получаются.
Пароль 12345 выглядит вот так в БД
{bcrypt}$2a$10$lh1lKAlSt5eBRw.tyO.D7.K/j4p2ABzp9zQTxxXLyN.fBnGALIvoS
в вот так он выглядит после шифрования brypt
{bcrypt}$2a$10$zqs1BGCTfiXgoA5ida09YugckF8Nrw/egCk.pRwSs6fLoTv5YmmEe
Как все таки получить идентичный результат что бы провести аутентификацию пользователя ?

Про префикс кстати я не понял. Речь о префиксе {bcrypt} ? Ну я его видел и использовал PasswordEncoder но не понимаю почему результат кодирования не совпадает.

Кодирование не всегда совпадает… Просто попробуйте в дебагере прогнать несколько раз passwordEncoder.encode("test") - результат все время разный. По дефолту спринг “подсаливает” пароли - добавляет в конец рандомную строку. Чтоб проверить пароль используйте

passwordEncoder.matches(password, user.getPassword())

2 симпатии

Благодарю!