不,您无法检查两个哈希值是否属于同一密码,除非您已经知道该密码。如果可以的话,这基本上达不到使用的目的password_hash
功能。
如果您知道密码,则可以简单地使用以下方法:password_verify http://www.php.net/manual/en/function.password-verify.php验证您的密码:
$res1 = "$2y$10$ZSlQNIbsLWfj7JLCSkvFLeS/adH.KnGZTgA1BcvyPXl7BEn7GhREO";
$res2 = "$2y$10$M6CnjqaxuUKNhg84T8NpLeylkUrvP1pzoZNhBWfpSzP2zJneuS1re";
var_dump(password_verify("test", $res1)); // returns true
var_dump(password_verify("test", $res2)); // returns true
所以,正如你所看到的,两个哈希值都会给你true
with password_verify()
方法,因此,您不需要检查两个哈希值是否属于同一密码。并且,如果您这样做,则可以使用上述逻辑来构造如下函数:
function belongs_to_password() {
$args = func_get_args();
$str = array_shift($args);
foreach ($args as $hash) {
if (!password_verify($str, $hash)) return false;
}
return true;
}
上述函数可用于检查传递给该函数的哈希值是否都是相同的密码。并且,可以这样使用:
$res1 = "$2y$10$ZSlQNIbsLWfj7JLCSkvFLeS/adH.KnGZTgA1BcvyPXl7BEn7GhREO";
$res2 = "$2y$10$M6CnjqaxuUKNhg84T8NpLeylkUrvP1pzoZNhBWfpSzP2zJneuS1re";
var_dump(belong_to_password("test", $res1, $res2)); // returns true