hash_equals 是 PHP 专门用来安全地比较两个字符串是否相等的函数,通常用在比较哈希值(比如密码哈希、签名等)的时候。它和普通的 ===== 比较运算符不同,主要原因是防止时序攻击(Timing Attack)

时序攻击是一种针对计算机系统的安全攻击方式,攻击者通过测量程序执行某些操作所耗费的时间差异,来间接获取敏感信息,比如密码、加密密钥或其他机密数据。

为什么不用 == 或 === 来比较哈希?

hash_equals 怎么解决这个问题?

具体举例

$hash1 = hash('sha256', 'password123');
$hash2 = hash('sha256', 'password124');

// 不安全的比较
if ($hash1 === $hash2) {
    echo "匹配";
} else {
    echo "不匹配";
}

// 安全的比较
if (hash_equals($hash1, $hash2)) {
    echo "匹配";
} else {
    echo "不匹配";
}

总结

你要是写安全相关代码,特别是验证哈希时,推荐一定用 hash_equals