如何安全地在数据库中存储密码?

4
我读到一种在数据库中存储密码的方法是:创建一个包含用户名、哈希值和盐的表格,其中盐永远不会被显示出来。
我将密码与盐相加生成哈希值。密码由用户输入,不会存储在数据库中。如果生成的哈希值与数据库中的相同,则密码正确。
但我有疑虑。如果发送密码时,它可能会在传输过程中被窃听,因此我认为也有必要加密通信。那么使用哈希和盐只是为了保护数据免受管理员的影响?我的意思是,如果我将密码存储在数据库中,管理员可以轻松访问所有信息。如果我存储了哈希值,管理员就无法访问用户的信息,因为管理员没有完整的信息,只有盐而没有密码。然而,在用户需要发送密码时,密码可能会被某人窃取,因此密码会暴露。
如何最好地保护用户信息?
谢谢。

http://www.troyhunt.com/2011/12/free-ebook-owasp-top-10-for-net.html - Ravi Gadag
2个回答

7

哈希密码也可以保护您的数据免受外部人员的侵害。想象一下,如果有人使用SQL注入访问您的数据,他只会得到一个哈希值而不是密码。您可以使用HTTPS来保证网络上的安全通信,并使用现有的哈希密码表来实现良好的安全模型。安全的盐加密密码哈希


1
如果必须明文传输密码,则必须保护其在传输过程中的安全。从浏览器到http服务器,您需要SSL/TLS。从应用程序服务器到数据库,您需要加密连接
有一些方案不需要传输密码,最为人知的是HTTP Digest。您可以在数据库中存储Digest的HA1部分。HA1摘要中包含的领域密钥和用户名作为对彩虹表的有效保护,但是Digest仍然基于MD5,使得该方案相对于足够装备的暴力破解而言相对较弱。然而,这样的暴力破解只会揭示特定用户名和领域的冲突,因此几乎没有任何用处。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接