在数据库中存储密码哈希值

Ahm*_*gle 0 security encryption web-applications

今天我想出了一个关于Web应用程序约定的问题.

为了安全起见,如果我们存储用户的密码,我们很可能正在加密它(使用MD5,SHA-1等)并存储消化哈希以使它们难以或不可能反转.

今天有许多彩虹表是通常的A-Za-z0-9序列的查找表,最多6个字符或广泛使用的密码.假设你是MD5一次用户密码并将哈希作为密码存储在数据库中,而且有一天黑客会破坏你的数据库,现在他们有很多md5哈希和电子邮件地址.当然,他们会查找密码,当他们获得预先编制的匹配时,他们将尝试登录该用户的电子邮件帐户.

这可以通过消化消息两次或简单地将其反转来轻松解决.但是我想知道关于这个问题的常规是什么,以及(据你所知)企业应用程序或巨头(Facebook,谷歌)如何解决这个问题?

Mat*_*son 5

你使用所谓的.在散列之前添加一些您组成的字符串.在检查密码时也要预先添加.这是一个应用程序范围的字符串.这使得通过彩虹表查找起来更加困难.

所以如果你的盐是"kdi37s !!" 将其保存在数据库中md5(kdi37s!!P@$$w3rd)并在检查时执行相同操作.

  • 通常盐是按用户生成和保存的,因此存在另一层复杂性 (2认同)
  • 只是想修改这篇文章:不要在你的系统中使用一种盐.对每个用户*使用随机盐,这些盐在您的用户表中值列.否则,一旦数据库被拥有并且黑客知道你的系统范围的盐,他就可以轻松地建立一个巨大的字典哈希,现在你真的拥有了! (2认同)