我正在将网站从 Wordpress 转换为在 Codeigniter 中开发的自定义 CMS。有人告诉我,Wordpress 使用 PHPass 来散列他们的密码,所以我使用 PHPass 库(如本网站所述)试图无缝地转换用户,而无需他们重置或更改密码。
我让它在我的应用程序中运行良好,但它没有生成与 Wordpress 使用的相同的密码哈希。我假设它与某种站点密钥有关,但我没有任何运气。如何让 PHPPass 生成相同的密码哈希?
我正在将网站从 Wordpress 转换为在 Codeigniter 中开发的自定义 CMS。有人告诉我,Wordpress 使用 PHPass 来散列他们的密码,所以我使用 PHPass 库(如本网站所述)试图无缝地转换用户,而无需他们重置或更改密码。
我让它在我的应用程序中运行良好,但它没有生成与 Wordpress 使用的相同的密码哈希。我假设它与某种站点密钥有关,但我没有任何运气。如何让 PHPPass 生成相同的密码哈希?
您将无法让 PHPass 两次生成相同的哈希 - 它使用随机盐。该盐存储在密码哈希中。
不过,您实际上并不需要生成相同的哈希值 - 复制旧的哈希值,然后使用 PHPass 的 CheckPassword($pass, $hash) 来检查密码。将数据库中的哈希作为 $hash 并将密码输入为 $pass,如果它们匹配,它将返回 true。
HashPassword() 方法仅用于创建新密码哈希(用于新密码),而不是与现有密码进行比较。
有几种可能性。他们要么使用不同的散列算法,要么对散列进行加盐或其他一些混淆方法。如果 Wordpress 对他们的哈希值加盐,那么你必须访问他们的盐表或单个盐词来改变他们的哈希值——但我怀疑你会明白这一点。我验证了 PHPass 确实支持加盐以及其他哈希混淆方法,因此其中之一可能是您的哈希值不一致的原因。