Spring security 如何将SHA-512与o.s.s.crypto.password.StandardPasswordEncoder一起使用?

Spring security 如何将SHA-512与o.s.s.crypto.password.StandardPasswordEncoder一起使用?,spring-security,sha512,Spring Security,Sha512,我需要在我的代码中使用SHA-512来散列密码 现在我使用o.s.s.authentication.encoding.PasswordEncoder,同时将其初始化为ShaPasswordEncoder(512) 此外,o.s.s.authentication.encoding.PasswordEncoder支持该方法 String encodePassword(String rawPass,Object salt)允许将盐与密码分开存储 不幸的是,o.s.s.authentication.en

我需要在我的代码中使用
SHA-512
来散列密码

现在我使用
o.s.s.authentication.encoding.PasswordEncoder
,同时将其初始化为
ShaPasswordEncoder(512)

此外,
o.s.s.authentication.encoding.PasswordEncoder
支持该方法
String encodePassword(String rawPass,Object salt)
允许将盐与密码分开存储

不幸的是,
o.s.s.authentication.encoding.PasswordEncoder
已被弃用

另外,
o.s.s.crypto.password.StandardPasswordEncoder
仅支持
SHA-256

此外,它是最终类,不允许其重载来支持
SHA-512

如何将SHA-512与o.s.s.crypto.password.StandardPasswordEncoder一起使用?
为什么没有公开的方法可以让盐从外部储存?

我必须承认,这不是春季安全中最连贯的部分
DaoAuthenticationProvider.getPasswordEncoder()
返回一个
o.s.authentication.encoding.PasswordEncoder
,根据javadoc,它已被弃用

诀窍是
DaoAuthenticationProvider.getPasswordEncoder()
将一个对象作为参数,这个对象可能是一个
o.s.authentication.encoding.PasswordEncoder
。。。但不要试图做一个得到

据我了解,
o.s.s.crypto.password.StandardPasswordEncoder
就是一个中等安全性和固定SHA-256的例子。如果您想要更高级别的安全性,可以使用
o.s.s.crypto.password.BCryptPasswordEncoder
,它使用具有可配置级别的健壮BCrypt算法。查看源代码后,我可以确认是否使用salt并将其存储在内部的编码密码中

也许Spring安全团队的某个人可以解释这些(可讨论的)选择的原因,即无法更改摘要算法,但我不能;也许这仅仅是因为对于使用SHA来说,坚持使用(不是不推荐的)
ShaPasswordEncoder
就足够了。我只是在
StandardPasswordEncoder
中提到了这一点:如果您正在开发一个新系统,
BCryptPasswordEncoder
在安全性和与其他语言的互操作性方面都是一个更好的选择

因此,要么你听从
标准密码编码器
作者的建议,直接使用
BCryptPasswordEncoder
,要么你必须自己动手

复制
StandardPasswordEncoder
的源代码就足够了,只需坚持
org.springframework.security.crypto.password
包,因为存在包私有导入,并将2参数构造函数修改为公共的,如下所示:

public ConfigurablePasswordEncoder(String algorithm, CharSequence secret) { ... }
所有这些与其说是一个干净的解决方案,不如说是一系列的变通方法,但我从来没有找到更好的方法

作为结论,我认为只有接口
o.s.s.authentication.encoding.PasswordEncoder
不受欢迎,因为它将salt存储在编码密码之外。因此,它不应用于密码编码器的进一步开发。但是它的实现类并没有被弃用(无论是在上一个3.2版本中,还是在4.0.0M2版本中),如果满足您的要求,您可以安全地继续使用
ShaPasswordEncoder