我有一个遗留应用程序,其中密码使用MD5进行哈希处理而不使用盐。我想用盐切换到SHA1,但我想保留当前用户的密码。
我的计划是将散列函数更改为sha1(md5(password) + salt)
。我将能够使用sha1(<existing_pass> + salt)
批处理所有现有的哈希值。
答案 0 :(得分:1)
关于问题1,我不太确定,但似乎没问题。
对于问题2:为所有用户提供相同的盐永远都不行。盐有两个功能。防止使用预先生成的哈希/彩虹表来搜索泄漏的数据库,并防止生成基于字典的哈希并使用它们搜索数据库。普通盐将在第一种情况下工作,使彩虹表无法使用,但不会阻止破解者进行字典攻击。如果cracker知道全局盐,他可以生成频繁的密码,哈希它们并grep整个数据库。如果每个用户生成salt,则无法使用此方案。
答案 1 :(得分:1)
保留md5不是一个好主意,请阅读这个问题:Use SHA-512 and salt to hash an MD5 hashed password?。
每个用户最好有一个盐。使用相同的salt,具有相同密码的用户将具有相同的哈希值,并且可以同时为所有密码创建彩虹表。