PHP password_hash检查两个哈希值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP password_hash检查两个哈希值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1784字,纯文字阅读大概需要3分钟。
内容图文
![PHP password_hash检查两个哈希值](/upload/InfoBanner/zyjiaocheng/724/f5afd204123f4f9983c01577b7cc0b70.jpg)
如果我使用password_hash函数创建了两个密码哈希,如何判断它们是否来自相同的基本密码?我知道每次使用不同的盐.我没有明文.
例如:
$2y $10 $M6CnjqaxuUKNhg84T8NpLeylkUrvP1pzoZNhBWfpSzP2zJneuS1re和$2y $10 $ZSlQNIbsLWfj7JLCSkvFLeS / adH.KnGZTgA1BcvyPXl7BEn7GhREO都来自哈希测试.如果将这两个哈希值作为参数,我该如何编写一个返回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()方法为您提供,因此,您无需检查两个哈希值是否属于同一密码.并且,如果这样做,上面的逻辑可用于构造这样的函数:
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检查两个哈希值全部内容,希望文章能够帮你解决PHP password_hash检查两个哈希值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。