我已經在現有問題中尋找答案,但在Rails中找不到任何涵蓋此散列方案的內容。Rails中的特定md5散列方案
我目前正在將一個PHP項目遷移到Ruby-on-Rails,我仍在學習。我正在努力移植MD5(我知道,這只是暫時的...)散列方案用於散列用戶密碼。我有普通的MD5工作,但無法找到我需要的散列方案的正確語法。
在PHP項目的散列方案的機制是:
創建密碼的MD5哈希值。 創建鹽的MD5哈希。 用salt_hash連接password_hash。 創建concatenated_string的MD5哈希。 比較stored_hash到concatenated_string
的PHP的哈希創作是:
function fn_generate_salted_password($password, $salt)
{
$_pass = '';
if (empty($salt)) {
$_pass = md5($password);
} else {
$_pass = md5(md5($password) . md5($salt));
}
return $_pass;
}
的(可憐)嘗試我對Rails中本節迄今:
Spree::User.class_eval do
def valid_password?(password)
if self.salt.present
if ::Digest::MD5.hexdigest((::Digest::MD5.hexdigest(password)).(::Digest::MD5.hexdigest(salt))) == self.stored_hash
*# Do some stuff*
else
false
end
end
end
end
任何想法?
一件事攜手邁向是儘可能快地殺死MD5密碼。請記住,當有人登錄並驗證其密碼正確時,您有機會使用相同的散列(例如bcrypt)版本更新其用戶記錄,無需騷擾用戶更改其密碼。 – tadman
爲了幫助解決問題的人們,可以舉例說明如何保存「測試」或「示例」等密碼,以便其他人可以驗證您的代碼是否正常工作? – tadman
謝謝,這個想法是,一旦他們通過身份驗證並登錄後,MD5哈希將從數據庫中刪除,密碼將在bcrypt中進行散列處理等。 我將檢查最終哈希結果是「測試」還是「例如「在PHP應用程序中,並儘快用答案更新這個問題。 只需要添加一下,我需要在這裏定位的「鹽」在legacy_salt的數據庫中有一個字段名稱,而不是「salt」。我需要在某個地方定義它,因爲它不是MD5摘要使用的默認「salt」嗎? – bearmettle