SSHA512 Шифрование и совпадение с пружиной 5
Я реализую Spring Security с помощью существующего LDAP, где пароль шифруется SSHA512. Устаревший LdapShaEncoder поддерживает только {SHA} и {SSHA}.
Может кто-нибудь помочь мне реализовать Java-кодировщик SSHA512 наряду с Spring Security. Или есть ли библиотеки, которые могут сделать эту работу?
import org.springframework.security.crypto.password.LdapShaPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Bean
public PasswordEncoder passwordEncoder() {
return new LdapShaPasswordEncoder();
}
Исключение:
java.lang.IllegalArgumentException: Unsupported password prefix '{SSHA512}'
at org.springframework.security.crypto.password.LdapShaPasswordEncoder.matches(LdapShaPasswordEncoder.java:173) ~[spring-security-core-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.security.crypto.password.LdapShaPasswordEncoder.matches(LdapShaPasswordEncoder.java:158) ~[spring-security-core-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.security.authentication.dao.DaoAuthenticationProvider.additionalAuthenticationChecks(DaoAuthenticationProvider.java:90) ~[spring-security-core-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:166) ~[spring-security-core-5.1.3.RELEASE.jar:5.1.3.RELEASE]
1 ответ
Решение
Посмотрите здесь: https://github.com/lathspell/java_test/tree/master/java_test_openldap Я в основном просто обменял SHA на SHA-512 в MessageDigest.getInstance() и скорректировал префикс и константы длины.