如果密码是加密的,有没有办法向用户发送他们当前的密码?

Is there a way to send a user their current password if it is encrypted?

我有一个使用 SHA1 加密用户密码并将散列存储在数据库中的应用程序。我想知道如果用户忘记了密码,是否可以要求将密码通过电子邮件发送给他们?或者我是否必须以纯文本形式存储密码才能实现此目的。提前致谢!

不,如果您对其进行哈希处理并仅存储哈希值,那么您将无法向他们发送密码。这确实是散列的原因之一;因为很难从散列恢复到原来的状态。

您也不希望明文保存他们的密码。能够将其发送给他们可能很有用,但是您为可能获得您数据库访问权限的人保留了密码宝库。

通常情况下,如果他们忘记了密码,他们必须将密码更改为新密码,而不是找回现有密码。

没有任何一种加密机制是 100% 安全的,因此您可以破解密码并发送它们,但请想一想您要做什么。如果您想安全地存储密码,那么这意味着无法以明文形式获取密码。如果您以明文形式存储它们,那么这首先否定了加密密码,更不用说通过明文电子邮件向他们发送密码的安全漏洞了。

相反,请考虑使用 bcrypt directly, has_secure_password (which uses bcrypt), or devise(它将处理执行密码重置)。