将密码哈希从SHA转换为bcrypt

Cha*_*ood 4 grails spring-security bcrypt jbcrypt

这个问题已在Stack Overflow问题中得到解答,但它并不是Grails特有的,也有点模糊.

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

启用 bcrypt哈希是一块蛋糕:

Config.groovy > grails.plugins.springsecurity.password.algorithm = 'bcrypt'
Run Code Online (Sandbox Code Playgroud)

但现在我需要应用程序将旧哈希转换为新哈希.从根本上说,我了解当用户登录时,我应该让应用程序检查密码是否为SHA-256哈希值,如果是,则使用bcrypt重新哈希输入的密码.过了一会儿,他们都会升级,代码可以删除.

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

编辑

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

Bur*_*ith 7

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

  • 我认为这很有意思且很好记录,所以我在这里编写了一个实现和博客文章:http://burtbeckwith.com/blog/?p = 2017 (7认同)
  • 您可能还需要`grails.plugin.springsecurity.password.hash.iterations = 1`,因为1.2插件使用了1次迭代,而2.0插件默认为10,000 (2认同)