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

时间:2016-03-22 20:47:05

标签: ruby laravel-4 bcrypt

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

我面临的问题是密码不匹配,因为laravel生成的哈希以$2y$10.....开头,而我的BCrypt生成哈希$2a$10....

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

我怎样才能将它们带到同一个版本上,以便我可以像这样在ruby中进行用户身份验证?

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

这应该返回true,而是返回false。

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

1 个答案:

答案 0 :(得分:4)

PHP l3方法对bcrypt-hashed条目使用非标准表示法。你需要纠正这个:

crypt

PHP的加密库中存在一个错误,因此hash = '$2y$10$tKrgxXzN.naFD3r//yX9/O5uJmGRA9lzlcoPgK.F8REX.kx9xOesS' BCrypt::Password.new(hash.sub(/\A\$2y/, '$2a')) == "Test1111!" # => true 代表固定版本。