将用户 table 从 Laravel 迁移到 Ruby 并使用 BCrypt 解码密码不起作用

Migrating users table from Laravel to Ruby and using BCrypt to decode passwords does not work

我正在将用户 table 从 laravel 应用程序迁移到 ruby SSO 服务器,我正在使用 BCrypt 验证 ruby 中的密码。

我面临的问题是密码不匹配,因为 laravel 生成的散列以 y..... 开头,而我的 BCrypt 生成散列 a....

两个哈希之间的版本不匹配。 Ruby BCrypt 显示版本 2a,而不是 laravel 2y

我怎样才能让它们使用相同的版本,这样我就可以像这样在 ruby 中进行用户身份验证?

BCrypt::Password.new(user.send(password_column.to_sym)) == @password

这应该 return 正确,但 return 错误。

BCrypt::Password.new('y$tKrgxXzN.naFD3r//yX9/O5uJmGRA9lzlcoPgK.F8REX.kx9xOesS') == "Test1111!"

PHP crypt 方法对 bcrypt 散列条目使用非标准符号。你需要更正这个:

hash = 'y$tKrgxXzN.naFD3r//yX9/O5uJmGRA9lzlcoPgK.F8REX.kx9xOesS'
BCrypt::Password.new(hash.sub(/\A$2y/, 'a')) ==  "Test1111!"
# => true

PHP 的加密库中存在错误,因此 2y 代表固定版本。