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

PHP与Node.js生成SHA256哈希结果不一致,求排查解决

PHP复现Node.js code_challenge哈希逻辑结果不一致的问题排查

问题核心在于PHP与Node.js处理哈希结果的格式差异:Node.js直接使用SHA256的二进制原始哈希数据进行编码,而你的PHP代码默认使用了哈希的十六进制字符串结果,导致后续编码逻辑完全偏离。

修正后的PHP代码

$code_verifier = "8uZj2CcGT9QS9uAiWOsN0EziwLnkfGEHEHHhWNOgOYpqsNrp97foyz4OK3TKQ3C6vE3T0FnN6Yo3WZ5A";
// 开启hash函数的二进制输出模式(第三个参数设为true)
$binary_hash = hash('sha256', $code_verifier, true);
$code_challenge = rtrim(strtr(base64_encode($binary_hash), '+/', '-_'), '=');

原代码错误说明

  • 原PHP代码中hash('sha256', $code_verifier)默认返回64位十六进制字符串(例如e4548f36b7acfe766c16db9b2f7665db5466986332b6309d757f6dcd6fe74c00),对这个字符串做base64编码,和Node.js直接对32字节二进制哈希值编码的结果必然不同。
  • Node.js的crypto.createHash('sha256').update(buffer).digest()直接输出SHA256计算后的二进制原始数据,再进行Base64 URL安全转换,这才是符合PKCE规范的正确流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:45:37