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

PHP中如何将十六进制值转二进制传入openssl_digest获正确摘要?

解决PHP中十六进制值的SHA256摘要计算问题

我来帮你搞定这个问题!你当前的问题核心在于:你直接把十六进制格式的字符串传给了openssl_digest,但这个函数默认会对字符串的字符本身计算哈希,而不是把它解析成十六进制对应的二进制数据——这就是结果和预期不符的原因。

正确的处理步骤

要得到预期的SHA256摘要,你需要先把十六进制字符串转换成二进制数据,再传入openssl_digest计算哈希。PHP里可以用hex2bin()函数完成这个转换。

修正后的代码

// 你的原始十六进制字符串
$hexValue = "d18b5be5aaa7b5d65c8c4cc1a86b081f6f42c86af071f234f5abeb3c54132fa000000001";
// 将十六进制字符串转换为二进制数据
$binaryData = hex2bin($hexValue);
// 对二进制数据计算SHA256摘要
$correctDigest = openssl_digest($binaryData, "sha256");

echo $correctDigest;
// 输出结果:5910bcacfd66fba4f880d9f291d243710b08176505015bd8408d8b5c4aaa7a52

补充说明

hex2bin()函数会把每两个连续的十六进制字符转换为一个字节的二进制数据,这样传给openssl_digest的就是你原本想要处理的二进制内容,计算出来的哈希值自然就和预期一致了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:37:19