gpt4 book ai didi

PHP password_hash 检查两个哈希值

转载 作者:可可西里 更新时间:2023-11-01 00:45:14 26 4
gpt4 key购买 nike

如果我有两个使用 password_hash 创建的密码哈希功能,我如何判断它们是否来自相同的基本密码?我知道它每次都使用不同的盐。我没有纯文本。

例如: $2y$10$M6CnjqaxuUKNhg84T8NpLeylkUrvP1pzoZNhBWfpSzP2zJneuS1re$2y$10$ZSlQNIbsLWfj7JLCSkvFLeS/adH.KnGZTgA1BcvyPXl7BEn7GhREO都来自散列 test .如果将这两个散列作为参数,我该如何编写一个返回 true 的函数?

这可能吗?

所以:

<?php
function check_hashes($hash1, $hash2) {
(some code)
}
echo strval(check_hashes('$2y$10$M6CnjqaxuUKNhg84T8NpLeylkUrvP1pzoZNhBWfpSzP2zJneuS1re', '$2y$10$ZSlQNIbsLWfj7JLCSkvFLeS/adH.KnGZTgA1BcvyPXl7BEn7GhREO'));
echo strval(check_hashes('$2y$10$ZSlQNIbsLWfj7JLCSkvFLeS/adH.KnGZTgA1BcvyPXl7BEn7GhREO', '$2y$10$LoUOu3kt7zm1YZI1PtAsD.yzWF0b9jqOaAH64lK51VtgqRJZBgtO6'));
?>

会输出:

TRUE
FALSE

最佳答案

不可以,除非您已经知道密码,否则您无法检查这两个哈希值是否属于同一个密码。如果可以的话,这基本上没有达到使用 password_hash 函数的目的。

如果您知道密码,您可以简单地使用方法:password_verify验证您的密码:

$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

因此,如您所见,两个哈希值都会通过 password_verify() 方法为您提供 true,因此,您无需检查两个哈希值是否正确是否属于同一个密码。而且,如果这样做,上述逻辑可用于构造如下函数:

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

关于PHP password_hash 检查两个哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20805178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com