为 Grails/Spring 安全 REST 用户手动计算 bcrypt "hashes"(并保存在数据库中)
Manually compute bcrypt "hashes" (and save in db) for Grails/Spring Security REST users
我需要在数据库中批量设置数百个密码。虽然我意识到我可以编写某种服务来通过 Grails,但要求是我严格地在 SQL 中进行更新。
我并不是说我需要使用一些数据库内置的 encrypt() 或 password() 函数,我只是说 user.password 字段的覆盖应该是 SQL-可编写脚本。出于 security/logging 的原因,我宁愿 而不是 在数据库中进行哈希处理。
哈希的生成方式是开放的,只要它可以很容易地自动化——越简单越好。 (是的,加密纯粹主义者,我认识到 bcrypt 输出不是真正的散列。)我尝试了一些东西,一个有效但时间过长而另一个只是 "doesn't work"(Grails 在身份验证期间拒绝密码):
http://bcrypthashgenerator.apphb.com/ 有在线生成工具。如果我到这里输入一个字符串,然后将该输出保存为数据库中的用户密码字段,一切正常。但是,他们有针对自动呼叫的内置保护,我尊重他们的意愿而不是试图绕过。
password_hash 中内置了一个支持 bcrypt 的 password_hash 函数。我已经尝试使用此调用的输出,但 Grails 不喜欢它(即,它告诉我我的密码无效):echo password_hash('test', PASSWORD_BCRYPT)
。如果我能以某种方式让它工作,那么只需一遍又一遍地点击它并收集我的输出就足够容易了。
首选是 i) 找到可行的东西,但 ii) 想知道为什么选项 #2 没有但选项 #1 可以。
PHP 的 password_hash() 在 5.3.7 之后使用 y$
前缀,而该站点(可能还有您的安装)使用 a$
.
a$ - The current key used to identify this scheme. Since a major
security flaw was discovered in 2011 in a third-party implementation
of the algorithm,[12] hashes indicated by this string are now
ambiguous and might have been generated by the flawed implementation,
or a subsequent fixed, implementation. The flaw may be triggered by
some password strings containing non-ASCII characters, such as
specially crafted password strings.
y$ - Post-2011 bug discovery, y$ may be used to unambiguously use
the new, corrected algorithm. On an implementation suffering from the
bug, y$ simply won't work. On a newer, fixed implementation, it will
produce the same result as using a$.
看来您的 Grails 安装使用的是易受攻击的 bcrypt 版本。如果打了补丁,PHP 编码的 y$
版本将(应该?)工作。
我需要在数据库中批量设置数百个密码。虽然我意识到我可以编写某种服务来通过 Grails,但要求是我严格地在 SQL 中进行更新。
我并不是说我需要使用一些数据库内置的 encrypt() 或 password() 函数,我只是说 user.password 字段的覆盖应该是 SQL-可编写脚本。出于 security/logging 的原因,我宁愿 而不是 在数据库中进行哈希处理。
哈希的生成方式是开放的,只要它可以很容易地自动化——越简单越好。 (是的,加密纯粹主义者,我认识到 bcrypt 输出不是真正的散列。)我尝试了一些东西,一个有效但时间过长而另一个只是 "doesn't work"(Grails 在身份验证期间拒绝密码):
http://bcrypthashgenerator.apphb.com/ 有在线生成工具。如果我到这里输入一个字符串,然后将该输出保存为数据库中的用户密码字段,一切正常。但是,他们有针对自动呼叫的内置保护,我尊重他们的意愿而不是试图绕过。
password_hash 中内置了一个支持 bcrypt 的 password_hash 函数。我已经尝试使用此调用的输出,但 Grails 不喜欢它(即,它告诉我我的密码无效):
echo password_hash('test', PASSWORD_BCRYPT)
。如果我能以某种方式让它工作,那么只需一遍又一遍地点击它并收集我的输出就足够容易了。
首选是 i) 找到可行的东西,但 ii) 想知道为什么选项 #2 没有但选项 #1 可以。
PHP 的 password_hash() 在 5.3.7 之后使用 y$
前缀,而该站点(可能还有您的安装)使用 a$
.
a$ - The current key used to identify this scheme. Since a major security flaw was discovered in 2011 in a third-party implementation of the algorithm,[12] hashes indicated by this string are now ambiguous and might have been generated by the flawed implementation, or a subsequent fixed, implementation. The flaw may be triggered by some password strings containing non-ASCII characters, such as specially crafted password strings.
y$ - Post-2011 bug discovery, y$ may be used to unambiguously use the new, corrected algorithm. On an implementation suffering from the bug, y$ simply won't work. On a newer, fixed implementation, it will produce the same result as using a$.
看来您的 Grails 安装使用的是易受攻击的 bcrypt 版本。如果打了补丁,PHP 编码的 y$
版本将(应该?)工作。