这个问题是前一个问题的一个分支: 将盐存储在与哈希密码相同的字段中是否安全/明智?
假设您运行一个 Web 门户,并将密码存储在 SHA1 哈希中。您如何将其升级为 BCRYPT 哈希?
通常,您会等待用户登录,然后将他们的密码(从他们输入的明文)重新散列到 BCRYPT。但是所有用户都可能需要一段时间才能登录到您的平台,并且总会有不活跃的用户永远不会回来。
另一个建议(我第一次从 Troy Hunt 那里听到)是对数据库中现有的 SHA1 密码进行 BCRYPT。实际上你会BCRYPT(SHA1(plaintext_password))
。这样,系统上的所有用户都会立即升级到 BCRYPT,无论他们的活动如何。
这样,对您的数据库的破坏不会暴露尚未登录但仍在 SHA1 上的用户。
问题是:
- Is
BCRYPT(SHA1(plaintext_password))
在安全性上等同于BCRYPT(plaintext_password)
- 如果不是——为什么?差距是否足够合理,可以考虑这个选项?
该问题侧重于 BCRYPT(SHA1),但可以轻松应用于任何两种哈希算法,最后应用更强的哈希算法。