md5 之上的 bcrypt 会降低其安全性吗?

信息安全 哈希 md5
2021-08-18 09:16:59

我最近检查的一个 GitHub 项目存在安全缺陷,因为他们使用未加盐的 md5() 对密码进行哈希处理。我打开了一个错误,他们承认了。但是,从 md5() 到 bcrypt 的转换意味着每个用户都需要登录才能迁移密码。

所以我的问题是,在 md5() 上使用 bcrypt 会降低它的安全性吗?

// For already logged in users:
if (password_verify(md5($_POST['pass']), $DBHash)) {

  }

这样,整个数据库可以很容易地迁移,而不是单独迁移每个用户。

除了如果处理不当,PHP 可能会超时,是否还有其他问题?(每个哈希大约 1 秒)。

1个回答

绝对不。事实上,在我参与的每个项目中,这几乎是从弱哈希方案迁移到 bcrypt 的标准过程。

通常发生的情况是为每个用户设置一个标志,表明他们的密码使用旧方案,并且每当他们登录时,应用程序都使用向后兼容的登录逻辑。一旦用户登录,您就有了他们的明文密码,现在您可以简单地获取新密码并仅使用 bcrypt 存储它,取消设置标志。所有新用户都使用新的 bcrypt-only 方案。

或者,您可以按照 CodesInChaos 的建议继续使用新的bcrypt(md5()). 虽然他确实是正确的,没有安全收益,但我个人喜欢bcrypt()保留它