如果密码以哈希值存储,用户能否要求将密码通过电子邮件发送给自己?
有没有办法将哈希值转换为明文密码,需要哪些正确的信息来完成此操作?
如果一个用户在两个网站上存储相同的密码哈希值,这两个网站上的密码是否相同?
如果密码以哈希值存储,用户能否要求将密码通过电子邮件发送给自己?
有没有办法将哈希值转换为明文密码,需要哪些正确的信息来完成此操作?
如果一个用户在两个网站上存储相同的密码哈希值,这两个网站上的密码是否相同?
通常情况下,散列(Hash)密码是无法被检索出来的(这取决于散列函数,安全的散列算法是无法被检索出来的)。如果在两个网站上使用的散列相同,则可能意味着用户使用了相同的密码,这取决于网站使用的散列盐、加密方法等。
如果您的密码存储在一个良好的散列系统中,提供商不应该能够通过电子邮件向您发送密码,如果忘记密码,必须重置密码。
简而言之,不行。大多数哈希算法都可以有多个输入产生相同的输出。提供密码重置选项通常更好。
有不同类型的哈希算法。其中一些比其他算法更安全。MD5是一种流行但不安全的算法。SHA系列是另一组更安全的算法。
根据定义,哈希是一种单向函数。它无法被反转。
常用哈希算法无法被逆转。可以使用暴力破解(尝试每个可能的密码)或者使用密码列表(使用常用密码列表)结合暴力破解来加速,但这仍然是一个非常缓慢和需要大量CPU的过程。
许多网站采用的最佳方式是创建一个“密码重置”按钮,在其中输入用户名和电子邮件地址,如果匹配,则发送一个随机密码并给您提供一个登录页面的链接,您可以使用随机密码登录并更改密码。
要做到这一点,您必须具有带有字段的模型:
Hashed_password
Salt
你需要知道用户使用的哈希密码方法(这里我使用SHA1) 然后你可以在控制器中定义:
def self.encrypted_password(password, salt)
string_to_hash = password + "wibble" + salt
Digest::SHA1.hexdigest(string_to_hash)
end
接下来你可以进行比较:
user.Hashed_password == encrypted_password(password, user.salt)
True表示"password"是用户"user"的密码