You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP password_hash传入false/null时行为异常?是否我的理解有误?

关于PHP password_hash()处理false/null返回有效哈希的解释

嘿,这其实不是password_hash()的异常行为,而是PHP的类型转换规则在背后起作用,咱们来拆解清楚:

首先看你提供的代码:

$var = password_hash(false, PASSWORD_DEFAULT, ['cost' => 10]);
$var = password_hash(null, PASSWORD_DEFAULT, ['cost' => 10]);
var_dump($var);

你觉得应该返回false,但实际得到了有效哈希,核心原因是:password_hash()的第一个参数要求是字符串类型,而PHP是弱类型语言,当你传入非字符串的false或null时,会自动触发隐式类型转换:

  • false会被转换为空字符串""
  • null同样会被转换为空字符串""

换句话说,你实际上是在对空字符串执行哈希操作,而空字符串是合法的输入,所以函数会正常生成对应的哈希值,而不是返回false。

那什么时候password_hash()才会返回false呢?只有当输入参数不符合要求时才会触发,比如:

  • 指定了不支持的哈希算法(比如一个不存在的算法常量)
  • cost参数设置超出有效范围(PHP规定cost的有效值是4到31之间)

举个测试例子验证一下:

// 对空字符串哈希,返回有效哈希
var_dump(password_hash("", PASSWORD_DEFAULT)); 
// 传入无效算法,返回false
var_dump(password_hash("test", 999)); 

如果想避免这种“意外”的哈希生成,建议在调用password_hash()之前先做输入校验,确保传入的是有效的非空字符串,比如:

function safePasswordHash($input) {
    if (!is_string($input) || empty($input)) {
        return false;
    }
    return password_hash($input, PASSWORD_DEFAULT, ['cost' => 10]);
}

内容的提问来源于stack exchange,提问作者Milan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 17:13:11