0

众所周知,Drupal 使用 SHA2 方法存储密码,其中涉及加密 + 哈希 + 盐。

我有一个密码列表,我的一些客户目前在 Drupal 中使用这些密码。由于我们已将整个系统迁移到自定义 PHP,因此我们无法使用相同的密码。而且我们真的不想要求数据库中的每个人都生成新密码。

如果有任何方法,我们可以更改 SHA2(Drupal - 512 加密)中的所有密码以支持我们当前具有 MD5/SHA1(PHP Mysql 数据库)的新系统。

任何帮助,将不胜感激。

4

4 回答 4

4

你真的不想去MD5。就密码散列方法而言,它已经死了。您应该至少迁移到password_hashBcrypt 之类的东西。

请记住,当有人登录并且您验证他们的密码正确时,您就有机会更新密码在数据库中的散列方式。如果他们使用的是弱方法,请切换到强方法并保存他们的用户记录。没有人会知道你做了什么。

大约一年后,如果您担心这种挥之不去的责任,您总是可以强制使所有旧格式的密码过期。您的所有活跃用户都不会受到影响。

于 2016-07-16T13:21:01.917 回答
1

我不建议更改为另一种密码格式,尤其是 MD5。由于您已经拥有密码,您可以在自己的应用程序中实现 Drupal 密码散列,并继续使用现有密码。

例如,可以在此问题中找到有关密码格式的更多信息。

于 2016-07-16T13:32:07.987 回答
0

我认为您应该使用“过渡”。例如,使用您的新系统,但在数据库中保留旧密码。

在您的代码中,在用户登录时,您会获得密码(例如$_POST['pwd']:),并使用算法(不是 MD5)对其进行加密。然后,您可以将其插入数据库的新字段中。

因此,您的新数据库可能有一个包含旧密码的字段“old_pwd”和一个包含使用新算法的新密码的字段“pwd”。据我所知,这是最容易进行此迁移的方法。

于 2016-07-16T13:39:48.613 回答
0

密码检查代码在 Drupal 7 和 8 中非常相似并且易于借用,它对 Drupal 组件没有任何强依赖。在您的密码检查代码中添加对 Drupal 哈希的支持应该很容易。允许通过将 Drupal 的哈希存储在数据库中来使用他们的密码进行身份验证。

要迁移到新的散列算法,只需在成功验证时重新散列密码即可。这样,旧的哈希值将随着时间的推移而被替换。

Drupal 具有类似的机制来确保透明更新或旧的 MD5 哈希。查看user_check_password()user_needs_new_hash()以了解它是如何完成的。

于 2016-07-16T21:17:31.620 回答