gpt4 book ai didi

spring - BCryptPasswordEncoder.matches() 方法的签名不适用于参数类型 : (java. lang.String, java.lang.String)

转载 作者:行者123 更新时间:2023-12-02 15:26:29 28 4
gpt4 key购买 nike

我在尝试使用 spring-security-core:2.0-RC4 匹配用户密码时遇到问题与 Grails 2.3.3 .

执行 passwordEncoder.matches(rawPassword, encodedPassword) 时出现以下错误

No signature of method grails.plugin.springsecurity.authentication.encoding.BCryptPasswordEncoder.matches() is applicable for argument types: (java.lang.String, java.lang.String)

我检查了 BCryptPasswordEncoder source寻找线索,最终在 PasswordEncoder class definition .

BCryptPasswordEncoder中的导入虽然新的 PasswordEncoder 在 org.springframework.security.crypto.password 中,但看起来有问题.

passwordEncoder.isPasswordValid(rawPassword, encodedPassword, null)工作(如,没有错误),但我不知道如何得到盐。

这工作正常吗?如果是这样,我如何获得盐?

编辑:
我尝试使用 NullSaltSource也是,但它给了我错误:
Salt value must be null when used with crypto module PasswordEncoder

最佳答案

正如错误所说,您不能将盐与 bcrypt 一起使用。不过这很好 - 该算法非常健壮,并且就像它已经在使用盐一样。

加盐的目的是确保如果你和我有相同的密码,我们没有相同的散列密码(假设我们每个人都有自己的加盐值)。未加盐的密码不能被去散列,但可以为不超过一定长度的所有密码组合创建一个散列表,并将其用作查找给定散列的明文密码。在互联网上搜索“彩虹表”,您会发现有 MD5、SHA-1 和其他算法的查找表的站点。

如果你运行 encodePassword使用 bcrypt 的空盐值,每次运行都会得到不同的哈希字符串。 isPasswordValid使用更简单算法的方法实现通常使用提供的盐对明文密码进行散列(如果有),并检查该值是否与存储的散列相同。但是使用 bcrypt 是不够的,所以它有逻辑来验证它们是否相等,但不一定相等。

该插件使用两个接口(interface)的混合实现以实现向后兼容性,并将在 future 版本中放弃对旧接口(interface)的支持。

关于spring - BCryptPasswordEncoder.matches() 方法的签名不适用于参数类型 : (java. lang.String, java.lang.String),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26735469/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com