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

时间:2015-03-25 21:08:52

标签: php mysql

我是PHP和MySQL的新手。我使用SHA1列出了存储在MySQL中的200个密码。我想将这些更新为password_hash()。这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:3)

您无法直接执行此操作,因为SHA1哈希不可逆。您只能在用户成功登录时计算password_hash。

答案 1 :(得分:2)

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

在这种情况下,我要做的是强制所有用户在新的哈希算法到位后重置密码。如果您已经有密码重置系统,这应该相当容易。如果没有,你将不得不建立一个。

这就是我看待它的工作原理

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

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

答案 2 :(得分:1)

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

  1. 您想要从SHA-1转换为password_hash默认值。
  2. 您有定期登录的用户。
  3. 在密码表中创建一个额外的列,用于存储新的哈希。当用户成功登录时,使用默认哈希散列密码并将其存储在新列中。经过一段时间后,您将转换大部分哈希值。标记其余用户并要求他们重置密码。显然,必须先修改密码检查机制,然后使用默认值检查密码。如果哈希的值为空,那么您将不得不继续使用SHA-1哈希(及其"转换")。

    在现实世界中,对于您的客户而言,这比向所有客户重置密码更好。