我必须重建一个从Ruby on Rails到Node的项目.js.
该散列$2a$11$j2IA8cPRFFC4YOXTl5kb9eF02fwNdLyFAPOvflQ3h/QdX8mE1SNK2
用于密码Test1234
.我已经判断了Ruby on Rails代码,并看到了以下散列密码的函数
General info
COST = 11
SALT = 1234567890
Create hash
def password_hash(password)
pwd = "#{password}#{SALT}"
::BCrypt::Password.create(pwd, cost: COST)
end
Does passwords match?
def password_match?(password = nil)
password ||= @params[:password]
encrypted_password = get_encrypted_password
return false if !encrypted_password || encrypted_password.size < 8
pwd = "#{password}#{SALT}"
BCrypt::Password.new(encrypted_password) == pwd
end
def get_encrypted_password
return unless @account
@account.encrypted_password
end
就我对Ruby的了解而言,这意味着在password_match
函数中,pwd将是Test12341234567890
,如果Test12341234567890 (pwd)
与哈希匹配,则判断BCrypt::Password.new($2a$11$j2IA8cPRFFC4YOXTl5kb9eF02fwNdLyFAPOvflQ3h/QdX8mE1SNK2)
.
当我使用像https://bcrypt.online/这样的在线Bcrypt验证器并输入哈希值和pwd值时,我没有得到匹配.
我还try 在Javascript包中使用bcrypt.compare
方法,但这也不起作用.
我错过了什么?