1

不幸的是,我们被要求让我们的用户能够在他们忘记密码的情况下将电子邮件发送到他们的注册帐户、密码……。

“如果您忘记了密码,请单击此处”

所以 - 这意味着我需要能够解密密码。我不喜欢它,但这就是要求。我习惯于使用 SALT 并使用 SHA1 对密码进行哈希处理。然后将盐和散列密码存储到存储库中。

如果我想存储现在可以解密的密码,我不确定我应该做什么。它或多或少相同,但我应该改用 AES 吗?

希望得到一些帮助(最好是 .NET 中的代码示例)。

干杯!

注意:请不要将此线程变成关于哈希、解密和 OpenAuth 的主题。

4

2 回答 2

2

考虑到密码将通过 Internet 以未加密的方式传输,因此高安全性加密可能不那么相关。但无论如何,AES 就足够了。

仍然想问 - 桌面上是否有允许用户重置密码而不是通过电子邮件接收密码的选项?

于 2011-06-17T04:30:41.057 回答
2

您可以执行以下操作之一:

  1. 临时更改用户密码,并通过电子邮件向用户发送新密码,要求他在下次登录时更改。
  2. 具有重置密码的功能。它与第一个选项非常相似,但您需要创建一个临时令牌并将其作为链接发送给用户。
  3. 如果您真的非常需要加密密码并通过明文将其发送给用户,那么您需要找到一个好的加密方案来保护数据库中的密码。您可以使用Rfc2898DeriveBytes简单地创建一个随机密钥或派生密钥,然后您可以使用 AES 结合HMAC(用于验证)来加密和存储密码。您的应用程序需要知道此密钥才能解密数据,这是一个安全风险。可能您可以将此密钥存储在 web.config 文件或类似的文件中,这些文件永远不能从外部访问,并使用DPAPIRSAKeyContainer保护它。

如果您使用选项 1 或 2,则不需要能够解密密码,因此您可以使用哈希 + 盐,这将是最安全的方法。

于 2011-06-17T05:13:35.280 回答