当前位置: 首页 > 知识库问答 >
问题:

将md5密码哈希转换为PHP 5.5password_hash()

岳毅
2023-03-14

PHP5.5中新的password_hash API非常好,我想开始在任何地方使用它。对于一个使用旧数据库的旧项目,密码存储在md5散列中,将旧用户密码迁移到新的、更安全的API的最佳方法是什么?

除了简单地提示用户在下一次登录时重置密码(这对用户来说是不切实际和令人讨厌的)之外,我还考虑了使用当前md5哈希作为所有现有用户的password_hash()输入的可能性。为了验证这些用户的密码(在登录期间),我将他们的输入转换为md5散列,然后将其用于password_verify()。新用户将免于这一额外步骤。

这样做值得吗?有没有更好的透明迁移方式,用户不必为密码重置而烦恼,但我可以立即享受到更安全的哈希的好处?

最重要的是,采用现有的md5散列(容易使用强力)并使用password_hash()API对其进行“双散列”是否有安全好处?

共有1个答案

柴坚诚
2023-03-14

login.php(?)您可以将旧密码从MD5转换为bcrypt,并用新的MD5哈希替换数据库中旧的MD5哈希。

伪代码:

$password = $_POST["password"];

if (substr($pwInDatabase, 0, 1) == "$")
{
    // Password already converted, verify using password_verify
}
else
{
    // User still using the old MD5, update it!

    if (md5($password) == $pwInDatabase)
    {
        $db->storePw(password_hash($password));
    }
}

双重哈希不会增加bcrypt的安全性,因为bcrypt itsef是单向哈希函数

    null

您将需要更改列的长度,并使用新的哈希重新开始,以便使其生效。否则,MySQL将无声地失败。

 类似资料:
  • 问题内容: 给定密钥,有什么办法可以解密加密的MD5字符串? 问题答案: 尝试使用Google(请参阅使用Google破解MD5密码)或包含md5()之类的MD5散列的在线数据库;或GDATA(最后一个包含1,133,766,035个唯一条目)。

  • 问题内容: 我想将“ abc”之类的字符串转换为MD5哈希。我想在iOS和Swift中做到这一点。我尝试使用下面的解决方案 http://iosdeveloperzone.com/2014/10/03/using-commoncrypto-in- swift/ 更清楚地说,我想在Swift中实现类似于此PHP代码输出的输出: 输出:8b1a9953c4611296a827abf8c47804d7

  • 每个人在建构 PHP 应用时终究都会加入用户登录的模块。用户的帐号及密码会被储存在数据库中,在登录时用来验证用户。 在存储密码前正确的 哈希密码 是非常重要的。密码的哈希操作是单向不可逆的,该哈希值是一段固定长度的字符串且无法逆向推算出原始密码。这就代表你可以哈希另一串密码,来比较两者是否是同一个密码,但又无需知道原始的密码。如果你不将密码哈希,那么当未授权的第三者进入你的数据库时,所有用户的帐号

  • 问题内容: 我对加密/哈希知之甚少。 我必须对加密密钥进行哈希处理。Java中的示例是这样的… 现在,如果我错了,请纠正我,但是上面的代码使用MD5算法对字符串进行了哈希处理。 当我在C#中哈希相同的字符串时,我希望得到相同的结果。 我当前的C#代码看起来像这样… 但是末字节结果不匹配。 Java得到… C#得到… 我需要C#代码才能获得与Java代码相同的结果(不是相反),有什么想法吗? 谢谢。

  • 问题内容: 我有一个实现了hashCode()的向量类。它不是我写的,而是使用2个质数对2个向量分量进行异或运算。这里是: …因为这是来自已建立的Java库,所以我知道它可以正常工作。 然后,我有一个Boundary类,其中包含2个向量:“开始”和“结束”(代表直线的端点)。这两个向量的值是边界的特征。 在这里,我尝试为构成该边界的向量的唯一2元组(起点和终点)创建一个良好的hashCode()。

  • MVC 5>>将哈希密码转换为可读文本。 示例:HashPasword=amvicvyxq/gnj+gj9qmthnzt84tjzwciiudfa3upr+wymzuu4mappkxijhbz5djwgw==应转换为123456