PHP的password_hash和password_verify误报错误?

标签 php hash passwords password-protection verify

我对 PHP 密码功能不熟悉,但这对我来说似乎不正确。

<?php
$peppa = "ahsd88ah31qnaksdn9325h9asdgh3no1i3859173o5bnn789a79on352390sfm!89235n@n90a&*^T#&*$#$!*$#)";
$pw = 'jesustake-thewheel';
$peppered = $pw . $peppa;

$passhash = password_hash($peppered, PASSWORD_BCRYPT);
var_dump($passhash);

echo "<br>";

$should_fail = $pw . $peppa . ".1asd223";
echo password_verify($should_fail, $passhash);

?>

正如您所看到的,我在针对密码的 should_fail 测试末尾添加了一些额外的随机字符,但它仍然返回 True 匹配

我希望这会失败,因为末尾有其他字符不应该与原始字符匹配...我是否在这里遗漏了一些明显的东西,或者这是 php 中的错误(可能是我的 php)

版本15.6.30

最佳答案

正如 MarkBaker 在他的评论中已经提到的,这是 BCrypt 算法的限制,它将密码截断为 72 个字符。对于密码来说,这已经足够了,不是安全问题,但在你的情况下,你似乎达到了这个限制,因为你想添加胡椒。

绝不应该因为添加胡椒粉而截断密码。辣椒 jar 头increase security of weak passwords 。假设胡椒的大小合理,达到限制的密码非常强,并且对于这些密码,胡椒是不必要的。所以如果你把胡椒放在最后,你就失去了一部分胡椒,这比失去一部分密码要好。

也就是说,有更好的方法来添加胡椒。使用服务器端 key 加密(双向)哈希可以获得相同的好处。该 key 实际上类似于胡椒,但您的优点是,只要有必要,您就可以交换 key (胡椒成为密码的一部分,并且在下次登录之前无法更改)。我试图在关于 safely storing passwords 的教程末尾解释这一点。 。如果加密不适合您,那么至少使用 HMAC 将胡椒与密码结合起来。

关于PHP的password_hash和password_verify误报错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43931128/

相关文章:

php - password_hash 中的默认算法是什么

c# - 为自动化存储密码的最佳实践

php - Excel 2003 数据中的换行符

php - SQL注入(inject)和addSlashes

PHP 错误 Class inside function inside class.. 等等什么?丢失的

c# - 为什么我的 SHA-1 函数在 C# 中为两个文件显示相同的输出?

git - 如何获取在预接收 Hook 中提交的所有哈希值?

ruby - 从名称和变量数组创建散列(不能将数组转换为字符串)

php - OOP PHP First Class Mysql数据库连接

php - 有没有办法隐藏所有数据库信息,如密码、用户名等?