【问题标题】:Convert password hashing from SHA to bcrypt将密码散列从 SHA 转换为 bcrypt
【发布时间】:2014-01-09 16:22:36
【问题描述】:

this Stack Overflow question 已经回答了这个问题,但它不是 Grails 特有的,而且有点模糊。

我使用 Spring Security 设置了我的 Grails 应用程序,但显然没有获得最新版本,因为它默认为 SHA-256 而不是 bcrypt。现在,我有生产数据,其中的密码散列在一种似乎不太理想的方法中。

启用 bcrypt 哈希是小菜一碟:

Config.groovy > grails.plugins.springsecurity.password.algorithm = 'bcrypt'

但现在我需要应用程序将旧哈希值转换为新哈希值。从根本上说,我知道当用户登录时,我应该让应用程序检查密码是否为 SHA-256 哈希,如果是,请使用 bcrypt 重新哈希输入的密码。一段时间后,它们都将升级,并且可以删除该代码。

确定密码哈希是来自 SHA-256 还是 bcrypt 的实际代码是什么?

编辑

也就是说,我调用来获取哈希的实际函数是什么?我如何bcrypt(incomingpassword) 来查看它是否与现有的密码哈希匹配?

【问题讨论】:

    标签: grails spring-security bcrypt jbcrypt


    【解决方案1】:

    bcrypt 密码将以“$2a$10$”开头,长度为 60 个字符。 SHA-256 没有模式,但长度为 64 个字符。

    【讨论】:

    • 谢谢,伯特。不过,我仍然有同样的问题;我不知道如何随意实例化和调用任意密码编码器。我已经深入研究了 Spring Security 的内部结构,但它很快就超出了我目前的理解能力。如果我想去user.hashedPassword == bcrypt(incomingPassword)...我实际输入什么而不是“bcrypt”?
    • 我认为这很有趣,也很值得记录,所以我在这里编写了一个实现和博客文章:burtbeckwith.com/blog/?p=2017
    • 嗯。 Could not instantiate bean class [org.springframework.security.authentication.encoding.MessageDigestPasswordEncoder]: Constructor threw exception; nested exception is java.lang.IllegalArgumentException: No such algorithm [bcrypt] 我正在运行 Grails 2.2.0 和 Spring Security 插件 2.0-RC2。
    • 使用 SHA-256 或任何旧算法的设置 - bcrypt 编码器已明确配置。准备好切换到单一算法后,删除所有这些并像在新应用中一样配置 bcrypt
    • 你可能还需要grails.plugin.springsecurity.password.hash.iterations = 1,因为 1.2 插件使用了 1 次迭代,而 2.0 插件默认为 10,000
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2021-06-04
    • 2019-07-17
    相关资源
    最近更新 更多