我已经在现有问题中寻找答案,但在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