Xenforo密码验证Problrm

时间:2015-05-15 02:53:28

标签: authentication password-encryption password-hash php-password-hash xenforo

以下是我的密码存储哈希:

$ P $ Di4MXJKUkkJRfzrpffssNdasSN3XAg0

我正在尝试验证我的Xenforo密码:

$newHash = $crypt($userPass, $stored_hash);
return $newHash === $stored_hash;

例如:

我的密码是: 123456

我的密码存储哈希是: $ P $ Di4MXJKUkkJRfzrpffssNdasSN3XAg0

所以我正在编写以下代码进行身份验证:

$newHash = crypt("123456", "$P$Di4MXJKUkkJRfzrpffssNdasSN3XAg0");
return $newHash === "$P$Di4MXJKUkkJRfzrpffssNdasSN3XAg0";

任何人都可以建议我如何进行身份验证?

提前致谢。

1 个答案:

答案 0 :(得分:2)

您必须将新哈希与旧哈希进行比较,如下所示:

$existingHash = "$P$Di4MXJKUkkJRfzrpffssNdasSN3XAg0";
$newHash = crypt("123456", $existingHash);
$isSamePassword = $newHash === $existingHash;

我建议仅将此哈希算法用于向后兼容性,对于新哈希,您应该使用具有成本因子的慢速算法。最简单,最安全的方法是使用password_hash()函数:

// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);

// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);

修改

经过快速研究后,我发现phpass library使用了签名$P$,以防没有安全哈希算法可用。在没有替代方案的情况下,它使用迭代的MD5哈希方案。您可以尝试包含phpass库(代码可用)来检查哈希值。