1 回答
TA贡献1876条经验 获得超7个赞
如果将false
或更改null
为空字符串,您还将看到生成的哈希值,前导字节返回相同的结果。您可以轻松测试前导空字节:
$var = password_hash(null, PASSWORD_DEFAULT, ['cost' => 10]);
var_dump($var);
var_dump(password_verify("\0", $var));
最终var_dump()
结果bool(true)
显示您确实使用密码中的前导空字节创建了哈希。这是预期的行为,password_hash()
因为它只会在出现错误时返回 NULL。
所以这确实不是问题,因为没有人在密码中使用 NULL 字节。只有当您尝试“推出自己的”加密技术并且您通常传递的字符串根本不是字符串时,它才会成为问题。
即使您尝试在字符串中设置 NULL 字节,它实际上只是一个字符串:
$hashed = password_hash('\0asdfghjkl', PASSWORD_DEFAULT, ['cost' => 10]);
var_dump($hashed);
var_dump(password_verify("\0", $hashed));
从bool(false)
. password_verify()
_
底线
除非您试图做一些棘手的事情,例如预先散列您的密码,否则您在这里发现的都是设计使然。没有人输入除字符串以外的任何内容作为密码(您可以仔细检查密码,但不要清理它们,以确保它是一个会被视为穿着吊带腰带的字符串),并且您永远不应该遇到输入 NULL 字节的情况。
- 1 回答
- 0 关注
- 72 浏览
添加回答
举报