簡體   English   中英

在 Javascript 中重建/驗證 Ruby on Rails Bcrypt 密碼哈希

[英]Rebuild/Verify Ruby on Rails Bcrypt password hash in Javascript

我必須從 Ruby on Rails 重建一個項目到 Node.js。 Bcrypt 用於在 Ruby 項目中散列密碼,我正在嘗試重建相同的散列,以便我可以復制散列密碼,並且用戶可以在節點版本上使用相同的憑據登錄。

此哈希$2a$11$j2IA8cPRFFC4YOXTl5kb9eF02fwNdLyFAPOvflQ3h/QdX8mE1SNK2用於密碼Test1234 我檢查了 Ruby on Rails 代碼,看到了以下函數來散列密碼

基本信息

COST = 11
SALT = 1234567890

創建哈希

def password_hash(password)
  pwd = "#{password}#{SALT}"
  ::BCrypt::Password.create(pwd, cost: COST)
end

密碼是否匹配?

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

據我所知,這意味着在password_match函數中,pwd 將是Test12341234567890BCrypt::Password.new($2a$11$j2IA8cPRFFC4YOXTl5kb9eF02fwNdLyFAPOvflQ3h/QdX8mE1SNK2)檢查Test12341234567890 (pwd)是否匹配哈希。

當我使用像https://bcrypt.online/這樣的在線 Bcrypt 驗證器並輸入哈希值和 pwd 值時,我沒有得到匹配。

我還嘗試使用 Javascript 包中的bcrypt.compare方法,但這也不起作用。

我錯過了什么?

所以我們做了一個oopsie並在評論中解決了這個問題。 這是一個作為答案的回顧。

我:

我用“Test1234”和你提供的鹽嘗試了你的密碼哈希函數。 結果得到了 $2a$11$bhdYASCaEPv/0HXv3OFtIupv8CgHFoEWkMonShKnNN1fkmRIg.07S,通過您鏈接的在線驗證程序運行它並得到“提供的哈希與提供的純文本匹配”。

BCrypt::Password.new(password_hash("Test1234")) == "Test12341234567890" 也可以正常工作並返回true。

還嘗試了 Node.js 和 bcryptjs 並做了 bcrypt.compareSync('Test12341234567890', "$2a$11$bhdYASCaEPv/0HXv3OFtIupv8CgHFoEWkMonShKnNN1fkmRIg.07S")。 也可以正常工作並返回true。

托雷:

是的,這是您使用相同方法創建的新哈希。 但由於某種原因,當前存儲在數據庫中的密碼 Test1234 的已創建哈希 $2a$11$j2IA8cPRFFC4YOXTl5kb9eF02fwNdLyFAPOvflQ3h/QdX8mE1SNK2 未通過在線驗證測試和 node.js 中的 compareSync 測試

我:

這應該讓您知道問題不在於 Ruby 的哈希創建函數,也不在於節點的哈希測試函數,而是其他地方(技術上超出了這個問題的范圍)。 也許您的數據庫由於某種原因沒有存儲完整的哈希,或者以錯誤的方式存儲它。 也許某處的某些東西會剝離或轉義散列中的某些字符,從而使您得到不完整的字符。 也許前面提到的一些事情發生在鹽上。 也許數據庫中的散列是由不同的或更舊的散列函數生成的。 也許鹽變了。

托雷:

感謝您的評論! 根據您的評論,我發現他們使用的鹽與 .env 文件中的鹽不同。 它存儲在 Heroku 的配置變量中。 現在一切正常!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM