我一直在折腾如何将密码存储在我的数据库中一段时间的问题。这是我第一次通过网络登录创建一个安全的应用程序,所以我想建立一些良好的实践。散列和腌制密码字段
首先,我读了散列和腌制。看来这个想法是......
- 获得哈希算法
- 获得来自用户的密码
- 从用户添加“盐”以明文密码
- 哈希整个密码(包括食盐)
- 存储在数据库中的盐,这样就可以在以后检索(为PSWD验证)
这让我思考......如果黑客知道你的盐(b因为它存储在数据库的某处,可能是一个名为this_is_not_the_salt_ur_looking_for
的列或者其他含义不明的列),他们可以重新生成密码字典并获得访问权限。
然后我有一个想法。如果您将盐存储在哈希密码字段中,该怎么办?所以按照步骤1-4(随机地产生的盐),则在步骤5中,插入在由密码口译类或服务某处已知的密码的盐:
xxxxxsaltvaluexxxxxxxxxxxxxxxx
其中x是散列字符串值。任何人都可以看到这个问题吗?这完全没有必要吗?
答案:
没有理由不能这样做。正如Yahia所说,保护密码的其他方法包括双(或n)散列。在另一个说明中,BCrypt看起来像是一种几乎完全停止蛮力攻击的好方法,但我找不到C#的可信库。
TTD
我一直在想这个问题, 。 –