【问题标题】:Bcrypt Custom password configurationBcrypt 自定义密码配置
【发布时间】:2019-07-25 18:11:42
【问题描述】:

我正在更改密码,然后转发到 /loginuser 并重定向到用户仪表板。因为我是初学者,所以我使用 httpbasic 身份验证保护了这一点,我在休眠中使用 createNativeSQLQuery 并从数据库中获取结果。我是否必须实现任何 UserDetailsS​​ervice 接口 Spring Security?我的目标是只实现加密密码并将其存储在数据库中。我面临的问题是,我添加了一个 bean 配置,例如,

@Bean
        public PasswordEncoder customPasswordEncoder() {
            return new BCryptPasswordEncoder(){
                @Override
                public String encode(CharSequence rawPassword) {
                    return BCrypt.hashpw(rawPassword.toString(), BCrypt.gensalt(4));
                }
                @Override
                public boolean matches(CharSequence rawPassword, String encodedPassword) {
                    return BCrypt.checkpw(rawPassword.toString(), encodedPassword);
                }
            };
        }

我不知道它为什么抛出这个异常。我们应该对盐轮进行硬编码吗?

java.lang.IllegalArgumentException: Invalid salt
    at org.springframework.security.crypto.bcrypt.BCrypt.hashpw(BCrypt.java:552) ~[spring-security-core-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.security.crypto.bcrypt.BCrypt.checkpw(BCrypt.java:659) ~[spring-security-core-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at com.bootapp.FullTimeEquivalents.config.PasswordEncoderConfig$1.matches(PasswordEncoderConfig.java:29) ~[classes/:na]

【问题讨论】:

  • 您是否确保将加密的数据存储在数据库中,而不是纯文本中,并且在匹配项中,您是否使用第一个参数为纯文本,第二个参数为编码的函数调用了该函数.
  • 最初我将密码作为“密码”存储在数据库中,并尝试使用 PasswordEncoderConfig 类中的自定义 BcryptEncoder 配置更改密码和编码,同时尝试实现这一点我正面临这个问题

标签: java spring spring-boot spring-security


【解决方案1】:

我认为您有问题,因为您的编码密码长度

if (saltLength < 28) {
            throw new IllegalArgumentException("Invalid salt");
}

如何解决:

  1. 将盐轮增加到 10 个
  2. 尝试将最小密码长度设置为 4-5

希望对你有帮助。

【讨论】:

    【解决方案2】:
    @Autowired
        DataSource dataSource;
    
        @Bean
        public PasswordEncoder passwordEncoder()
        {
            return new BCryptPasswordEncoder();
        }
    
        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    
            auth.jdbcAuthentication().dataSource(dataSource).passwordEncoder(passwordEncoder());
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-22
      • 2019-01-16
      • 2020-06-23
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      相关资源
      最近更新 更多