代码之家  ›  专栏  ›  技术社区  ›  ahmet alp balkan

在数据库中存储散列的密码[关闭]

  •  0
  • ahmet alp balkan  · 技术社区  · 14 年前

    今天我提出了一个关于web应用程序惯例的问题。

    为了安全起见,如果我们存储用户的密码,很可能我们正在加密它(使用MD5、SHA-1等)并存储摘要散列,以使它们难以或不可能被反转。

    今天有许多彩虹表是常用的A-Za-z0-9序列的查找表,最多6个字符或广泛使用的密码。假设你用MD5加密了一次用户密码,并将散列作为密码存储在数据库中,有一天黑客入侵了你的数据库,现在他们有很多MD5散列和电子邮件地址。当然,他们会查找密码,当他们得到一个预索引匹配,他们会尝试登录到该用户的电子邮件帐户。

    惯例

    4 回复  |  直到 12 年前
        1
  •  5
  •   Matt Williamson    14 年前

    . 在散列之前预先准备一些你编的字符串。在检查密码时也要预先设置密码。这是一个应用程序范围的字符串。这使得通过彩虹表向上看要困难得多。

    所以如果你的盐是“kdi37s!!”将此保存到数据库中 md5(kdi37s!!P@$$w3rd)

        2
  •  3
  •   Frank Heikens    14 年前

    使用一点 salt 用sha1做一个散列。

        3
  •  2
  •   tszming    14 年前

    退房 PBKDF2 ,它是 真是太好了。

        4
  •  2
  •   Sam Saffron James Allen    14 年前

    如果你使用这样的算法 BCrypt 和盐(使用 blowfish brute force 攻击。当然,如果用户的密码是 a

    如果攻击者获得数据库的副本,一秒钟只能尝试10个左右的密码,这意味着获得任何密码都需要很长时间。如果你担心摩尔定律,并希望将来证明这一点,你可以指定一个成本,使算法更慢。

    纯SHA/X或MD5密码散列的问题是,通过设计,这些算法非常快,这使得它对暴力攻击非常敏感。当然,如果你不给你的杂烩加盐的话,还有很多 rainbow tables 这使得破解数据库中的所有密码变得微不足道。