如何将存储的密码从SHA1更新为password_hash


How to update stored passwords from SHA1 to password_hash

我对PHP和MySQL有点陌生。我有一个使用SHA1存储在MySQL中的200个密码的列表。我想将这些更新为password_hash()。最好的方法是什么?

您不能直接执行此操作,因为SHA1哈希是不可逆的。只有当用户成功登录时,才能计算password_hash。

如果没有明文,就无法生成新的哈希。

在这种情况下,我会强制所有用户在新的哈希算法到位后重置密码。如果你已经有一个密码重置系统,这应该相当容易。如果没有,你就必须建造一个。

这就是我认为它工作的方式

  • 一旦新系统准备就绪,您就可以丢弃所有的sha1密码。立即
  • 当用户尝试登录时,如果他们没有用新算法散列的密码,请向他们发送一封密码重置电子邮件
  • 重置电子邮件将包含一个具有唯一ID的链接,该链接将允许用户创建新密码

你可以通过在用户登录时将用户的密码更新为新的哈希来慢慢迁移到新系统,但在用户登录之前,你仍然会存储较弱的哈希。我认为最好放弃旧系统,重新开始,而不是试图混淆新旧哈希。

password_hash使用的哈希机制是单向的,这意味着无法从哈希中获得实际值。我在这里做两个假设:

  1. 您希望从默认SHA-1转换为默认password_hash
  2. 您有用户定期登录

在密码表中创建一个额外的列,用于存储新的哈希。当用户成功登录时,使用默认哈希对密码进行哈希,并将其存储在新列中。经过一段时间后,您将转换大部分哈希。标记其余用户并要求他们重置密码。显然,必须修改您的密码检查机制,以便首先使用默认值检查密码。如果哈希值为空,则必须继续进行SHA-1哈希(及其"转换")。

在现实世界中,对于您的客户来说,这将是一个比要求所有客户重置密码更好的解决方案。