Как сравнить текст пароля с хешами bcrypt? - PullRequest
0 голосов
/ 08 февраля 2019

В моем приложении есть сценарий использования, который должен помешать пользователю выбрать один из последних 3 паролей при сбросе пароля.Я использую Angular для передней части и Spring Boot для задней части.В моем сценарии пароли пользователей хранятся в виде хеша bcrypt.

Как сравнить пароль, введенный пользователем, с последними 3 сохраненными паролями bcrypt?

Когда я запускаю следующий фрагмент кода,

BCryptPasswordEncoder b = new BCryptPasswordEncoder();

    for(int i =0;i<10;i++) {
        System.out.println(b.encode("passw0rd"));

    }

, он генерирует следующие хэши bcrypt.каждый хеш отличается, что разумно, потому что когда я проверяю org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder, я вижу, что сгенерированная соль является случайным значением.

$2a$10$tztZsPFZ.T.82Gl/VIuMt.RDjayTwuMLAkRkO9SB.rd92vHWKZmRm
$2a$10$yTHyWDmcCBq3OSPOxjj4TuW9qXYE31CU.fFlWxppii9AizL0lKMzO
$2a$10$Z6aVwg.FNq/2I4zmDjDOceT9ha0Ur/UKsCfdADLvNHiZpR7Sz53fC
$2a$10$yKDVeOUvfTQuTnCHGJp.LeURFcXK6JcHB6lrSgoX1pRjxXDoc8up.
$2a$10$ZuAL06GS7shHz.U/ywb2iuhv2Spubl7Xo4NZ7QOYw3cHWK7/7ZKcC
$2a$10$4T37YehBTmPWuN9j.ga2XeF9GHy6EWDhQS5Uc9bHvJTK8.xIm1coS
$2a$10$o/zxjGkArT7YdDkrk5Qer.oJbZAYpJW39iWAWFqbOhpTf3FmyfWRC
$2a$10$eo7yuuE2f7XqJL8Wjyz.F.xj78ltWuMS1P0O/I6X7iNPwdsWMVzu6
$2a$10$3ErH2GtZpYJGg1BhfgcO/uOt/L2wYg4RoO8.fNRam458WWdymdQLW
$2a$10$IksOJvL/a0ebl4R2/nbMQ.XmjNARIzNo8.aLXiTFs1Pxd06SsnOWa

Конфигурация безопасности Spring.

  @Configuration
    @Import(SecurityProblemSupport.class)
    @EnableWebSecurity
    @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
    public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

        @PostConstruct
        public void init() {
            try {
                authenticationManagerBuilder
                    .userDetailsService(userDetailsService)
                    .passwordEncoder(passwordEncoder());
            } catch (Exception e) {
                throw new BeanInitializationException("Security configuration failed", e);
            }
        }
       @Bean
        public PasswordEncoder passwordEncoder() {
            return new BCryptPasswordEncoder();
        }
    }

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

вы можете использовать matches метод в BCryptPasswordEncoder, что-то вроде этого:

b.matches("passw0rd", hash)
0 голосов
/ 08 февраля 2019

На самом деле я нашел свой ответ.Я понял, что могу использовать matches функцию в классе org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder .

System.out.println(b.matches("passw0rd", "$2a$10$tztZsPFZ.T.82Gl/VIuMt.RDjayTwuMLAkRkO9SB.rd92vHWKZmRm"));
...