散列+盐渍电子邮件地址和用户名不是正常的事情吗?就像在数据泄露中一样,您无法知道谁注册了该服务,因为每个字段都是哈希+盐渍的?因为在互联网上有很多不足之处,有没有任何缺点?
对用户名/电子邮件地址进行加盐和散列不是标准做法。
确实,如果在存储之前进行盐渍和散列,攻击者将无法识别存储的用户名/电子邮件地址。事实上,没有人能够访问用户名/电子邮件(包括系统管理员等授权用户)。
当用户尝试登录时,他们将发送用户名(或电子邮件)和密码。由于每个salt对于该特定用户名是唯一的,因此将用户名/电子邮件与存储的哈希用户名/电子邮件相关联的唯一方法是测试每个salt +哈希组合,直到找到匹配或尝试/拒绝每个条目。
虽然这对于由少数用户组成的数据库来说可能是可能的,但实际上这是不可行的,因为散列计算要求很高。想象一下,等待几小时或几天登录服务计算每个salt + hash组合只是为了找到用户名只是拼写错误。
此外,如果您正在使用用户名,那么您将如何防止重复?
用户名必须是唯一的。如果您使用用户名加密,则无法阻止多个用户使用相同的用户名。
最明显的解决方案是数据库加密。虽然这有点超出了你的问题的范围,Wikipedia has a good article covering this topic.
由于以下几个原因,散列和使用用户名和电子邮件地址并不常见:
可用性
如果您的电子邮件地址经过哈希处理,则网站无法显示您的电子邮件地址,因为值已经过哈希处理。
安全
从安全角度来看,通过散列您的电子邮件地址,您将无法获得太多收益。想象一下,如果有人可以访问您的电子邮件地址,他们可以使用相同的哈希算法并通过迭代数据库轻松找到您的凭据。这就是为什么有些网站实施了单独的登录验证名称和显示名称。登录名保持散列(未加密),而显示名称未加散使用。除非攻击者拥有您的登录名/地址,否则无法破坏您的数据。在这种特殊情况下,电子邮件地址的散列可确保数据的完全安全性。