【发布时间】:2011-10-29 13:02:45
【问题描述】:
一段时间以来,我一直在纠结如何将密码存储在我的数据库中。这是我第一次使用 Web 登录创建一个安全的应用程序,所以我想建立一些好的做法。
首先,我阅读了散列和加盐。看来这个想法是……
- 获取哈希算法
- 从用户那里获取密码
- 在用户的纯文本密码中添加“salt”
- 散列整个密码(包括盐)
- 将盐存储在数据库中,以便以后检索(用于验证 PSWD)
这让我开始思考……如果黑客知道你的 salt(因为它存储在数据库中的某个地方,可能是名为 this_is_not_the_salt_ur_looking_for 的列或同样模棱两可的东西),他们可以重新生成密码字典并获得访问权限.
然后我有了一个想法。如果您将盐存储在 内部 散列密码字段中会怎样。所以按照步骤 1-4(随机生成 salt),然后在步骤 5 中,将 salt 插入密码解释类或服务已知的密码中:
xxxxxx盐值xxxxxxxxxxxxxxxxxx
其中 x 是散列字符串值。任何人都可以看到这有什么问题吗?这完全没有必要吗?
答案:
没有理由不能这样做。正如 Yahia 所说,保护密码的其他方法包括双(或 n)散列。另一方面,BCrypt 看起来像是几乎完全阻止暴力攻击的好方法,但我找不到 C# 的受信任库
谢谢!
TTD
【问题讨论】:
-
我自己也一直在考虑这个问题,谢谢你的提问。
标签: c# database passwords hash