java - Bcrypt 自定义密码配置
问题描述
我正在更改密码,然后转发到 /loginuser 并重定向到用户仪表板。因为我是初学者,所以我使用 httpbasic 身份验证保护了这一点,我在休眠中使用 createNativeSQLQuery 并从数据库中获取结果。我是否必须实现任何 UserDetailsService 接口 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]
解决方案
我认为您有问题,因为您的编码密码长度< 28,来自弹簧来源:
if (saltLength < 28) {
throw new IllegalArgumentException("Invalid salt");
}
如何解决这个问题:
- 将盐轮数增加到 10
- 尝试将最小密码长度设置为 4-5
我希望这会有所帮助。
推荐阅读
- python - 对最新推文的 Tweepy 回复进入循环
- python - 从绑定传递列表
- python - 使用 pandas.to_csv 时的奇怪字符
- apache-flink - Flink - 当没有以下事件时发出最后一个窗口
- css - 如何使标记的原点位于左下方?
- go - 处理模型特定操作与数据库操作
- arangodb - 如果 arangosearch 视图存在,ArangDb 3.4.milestone0 崩溃
- angular - bootstrap 4 不能与 angular 6 一起正常工作
- javascript - 使用 PHP 和 AJAX 在 Bootstrap 联系表单顶部显示错误消息
- android-room - Android Room 查询的可变性能说明