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

如何在PHP中生成与Node.js结果一致的SHA256哈希值

问题原因

两边哈希结果不匹配是因为PHP侧逻辑完全写错了:

  • Node.js 代码实现的是无密钥的原生SHA256哈希,计算的是空字符串的SHA256摘要,最终输出十六进制格式结果
  • 你写的PHP代码先计算了一次空字符串的二进制SHA256值作为密钥,又调用了带密钥的HMAC-SHA256算法做二次计算,和Node侧的逻辑完全不是一回事,结果自然无法匹配。
正确实现代码

直接调用PHP原生hash()函数即可,不需要用hash_hmac,代码如下:

// 与Node.js crypto.createHash('sha256').update('').digest('hex') 完全等效
$contentHash = hash('sha256', '');

运行上述代码输出的结果就是e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855,和Node.js侧结果完全一致。

参数对应规则

后续如果要计算其他内容的同规则SHA256哈希,按照以下对应关系传参即可:

  • Node侧createHash('sha256')指定算法,对应PHPhash()第一个参数固定传'sha256'
  • Node侧update(待计算内容)传入待哈希的原文,对应PHPhash()第二个参数传入相同的原文内容
  • Node侧digest('hex')指定输出十六进制格式,对应PHPhash()第三个参数保持默认值false即可,函数会直接返回十六进制字符串
  • 如果需要输出原始二进制格式的哈希结果(对应Node侧digest('binary')),把PHPhash()第三个参数设为true就行。

注意:hash_hmac是带密钥的HMAC哈希算法专用函数,只有当Node侧调用的是crypto.createHmac('sha256', 密钥)时才需要对应使用,普通明文哈希不要调用这个函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:42:17