2

我有一个旧版应用程序,其中使用不加盐的 MD5 对密码进行哈希处理。我想用盐切换到 SHA1,但我想保留当前用户的密码。

我的计划是将散列函数更改为sha1(md5(password) + salt). 我将能够使用sha1(<existing_pass> + salt).

  1. 在这种情况下保留 md5 是否安全?
  2. 可以为所有用户使用一种盐吗?
4

2 回答 2

1
  • 至于问题1,我不太确定,但似乎没问题。

  • 对于问题 2:对所有用户使用相同的盐是绝对不行的。盐有两个功能。防止使用预先生成的散列/彩虹表来搜索泄露的数据库,并防止生成基于字典的散列和使用它们搜索数据库。普通盐在第一种情况下会起作用,使彩虹表无法使用,但不会阻止饼干受到字典攻击。如果破解者知道全局盐,他可以生成频繁的密码,对它们进行哈希处理并 grep 整个数据库。如果为每个用户生成盐,则这种情况是不可能的。

于 2012-06-12T07:52:34.730 回答
1
  1. 保留 md5 不是一个好主意,请阅读这个问题:Use SHA-512 and salt to hash an MD5 hashed password? .

  2. 最好为每个用户准备一种盐。使用相同的盐,具有相同密码的用户将具有相同的哈希,并且可以同时为您的所有密码创建彩虹表。

于 2012-06-12T07:55:15.820 回答