4

我已经读过将密码存储在数据库中的一种方法是通过以下方式。拥有一个包含用户名、哈希和盐列的数据库表。盐永远不会显示出来。

我用密码+盐生成哈希。密码由用户发送,不存储在数据库中。如果生成的哈希值与数据库中存储的哈希值相同,则密码正确。

但我有我的怀疑。如果我发送密码,它可能会在有线传输时被嗅探,所以我认为加密通信也是必要的。那么使用哈希和盐只是为了保护数据免受管理员的侵害?我的意思是,如果我将密码存储在数据库中,管理员可以轻松访问所有信息。如果我存储哈希,管理员无法访问用户的信息,因为管理员没有一半的信息,只有盐,没有密码。但是,当用户需要发送密码时,这可能会被某人嗅探,因此密码会暴露出来。

保护用户信息的最佳方式是什么?

谢谢。

4

2 回答 2

7

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

于 2013-04-01T11:06:25.630 回答
1

如果您必须清楚地传输密码,那么您必须在传输过程中保护它。从浏览器到 http 服务器,您需要SSL/TLS。从应用服务器到数据库,您需要加密连接

有些方案不需要传输密码,最好知道的是HTTP Digest。您可以将 Digest 的HA1部分存储在数据库中。HA1 摘要中包含的领域秘密和用户名包含作为对彩虹表的有效保护,但摘要仍然基于 MD5 的事实使得该方案相对弱于装备齐全的蛮力。然而,这样的蛮力只会揭示特定于给定用户名和领域的冲突,因此几乎没有用处。

于 2013-04-01T11:48:36.783 回答