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

.NET HMACMD5哈希转PHP等效实现:结果不一致问题求助

解决.NET HMACMD5与PHP hash_hmac结果不一致的问题

我帮你梳理下这个差异的核心原因哈——本质是输出格式的不同:

  • .NET的HMACMD5.ComputeHash()返回的是原始二进制字节数组,直接是哈希计算后的原始字节值;
  • 而PHP的hash_hmac()默认返回的是小写十六进制字符串,是把原始字节转换成了人类可读的十六进制格式。

所以两者的哈希计算逻辑是一致的,只是输出形式不一样,导致你看起来结果不同。

修正后的PHP代码

要让PHP的输出和.NET的字节数组内容完全匹配,只需要给hash_hmac()加上第四个参数true,让它返回原始二进制字节流:

// 第四个参数设为true,返回原始二进制字节,和.NET的Byte()数组内容一致
$computedHash = hash_hmac('md5', $stringToHash, $secretPassword, true);

验证对比(可选)

如果你需要把PHP的原始字节转换成和.NET字节数组对应的十六进制形式(方便打印对比),可以用bin2hex()转换:

$hexHash = bin2hex($computedHash);

这个十六进制字符串就和你把.NET字节数组逐个转成十六进制拼接后的结果一致了。

参考代码对比

.NET原代码:

Dim hmac As New HMACMD5(secretPassword)
Dim computedHash As Byte() = hmac.ComputeHash(stringToHash)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:32:42