У меня есть старое приложение, работающее на PHP, которое использует функцию base64_encode(hash_hmac(“sha512”, $p_password, $p_salt, true))
для кодирования паролей в нашей базе данных. Я переношу это приложение на Java Spring Boot и хочу точно так же кодировать пароли во время аутентификации.
Я нашел, как сделать тот же метод хеширования с Java в этом сообщении Compute HMAC-SHA512 с секретным ключом в java, и я также узнал, что у нас может быть несколько кодировщиков паролей для старых и новых пользователей с https://spring.io/blog/2017/11/01/spring-security-5-0-0-rc1-Release#constructing-delegatingpasswordencoder
Но я до сих пор не могу найти пример того, как я могу интегрировать этот метод хеширования в процесс аутентификации Spring. Мне нужно создать PasswordEncoder
bean-компонент, и я не знаю, что поместить внутрь. Я пробовал Pbkdf2PasswordEncoder
, потому что он может создать некоторый хэш SHA-512, как в моем приложении, но получаю сообщение об ошибке Detected a Non-hex character at 1 or 2 position
. Вероятно, это связано с тем, что пароли не имеют префикса {pbkdf2} в базе данных. Следующий код - это то, что я сейчас использую как PasswordEncoder.
@Bean
public PasswordEncoder passwordEncoder() {
Pbkdf2PasswordEncoder passwordEncoder = new Pbkdf2PasswordEncoder("salt");
passwordEncoder.setAlgorithm(Pbkdf2PasswordEncoder.SecretKeyFactoryAlgorithm.PBKDF2WithHmacSHA512);
return passwordEncoder;
}
Мне нужна помощь в настройке правильного кодировщика паролей для использования HMAC-SHA512 в моем процессе аутентификации с помощью Java Spring, а во второй раз объедините его с BCrytPasswordEncoder
(для новых пользователей) с DelegatingPasswordEncoder
. Может быть, требуется обновить пароли в БД, чтобы указать в них правильный кодировщик?
Если мой вопрос недостаточно точен или отсутствует информация, спрашивайте меня, чтобы узнать подробности :)