在 Spring Security 3.1 中,StandardPasswordEncoder 对密码进行盐渍化最合适的用途是啥?

Posted

技术标签:

【中文标题】在 Spring Security 3.1 中,StandardPasswordEncoder 对密码进行盐渍化最合适的用途是啥?【英文标题】:What is the most appropriate use of StandardPasswordEncoder for salting passwords in spring security 3.1?在 Spring Security 3.1 中,StandardPasswordEncoder 对密码进行盐渍化最合适的用途是什么? 【发布时间】:2011-08-05 06:20:42 【问题描述】:

我想为我正在开发的网站添加密码加盐功能,我发现 Spring Security 3.1 有一些新功能可以很容易地做到这一点。

我对 StandardPasswordEncoder 类有疑问。它的运作方式与我预期的略有不同。使用起来似乎比自己编写加盐代码更简单,但我认为其中有一些我不明白的“魔法”。

StandardPasswordEncoder 似乎为我随机加盐,这很好。但是在将原始密码与编码密码匹配后......它如何能够在不知道原始盐首先是什么的情况下匹配密码?

据我了解,一旦你做了盐,你就不能回去......所以如果有一个随机盐首先生成编码的哈希...... StandardPasswordEncoder 如何能够匹配密码稍后?我很迷惑。我不应该得到盐,将盐保存在数据库中然后提供盐吗?如果没有我存储和提供盐值,它怎么能做到这一点?

感谢您消除困惑。我希望我的问题有意义。

【问题讨论】:

【参考方案1】:

它存储与盐连接的散列密码,请参阅StandardPasswordEncoder.java,因此它在检查密码时知道盐。

【讨论】:

我只是以与在 Apache commons 中调用 DigestUtils.md5() 相同的方式使用它。我用它一次来创建盐,然后再次创建最终的散列密码。然后,我为 Spring 安全性创建了一个自定义身份验证提供程序,它合并了 salt 并使用数据库中的 salt 匹配散列密码。效果很好。我希望他们提供这个“开箱即用”,但是哦,好吧。

以上是关于在 Spring Security 3.1 中,StandardPasswordEncoder 对密码进行盐渍化最合适的用途是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Security 3.1 中进行没有身份验证和授权的并发会话控制

spring security 3.1 实现权限控制

在 Spring Security 3.1 中,StandardPasswordEncoder 对密码进行盐渍化最合适的用途是啥?

Spring Security 3.1 中功能强大的加密工具 PasswordEncoder

如何在 Spring Security 3.1 中使用 acl_entry 表中的掩码字段?

Spring Security 3.1 + JPA - 空指针异常