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

PHP与C#的HMACSHA256签名代码是否等价?输出不一致如何解决

C# HMAC-SHA256逻辑迁移PHP解决方案

问题原因

两者输出不一致主要来自两个核心差异:

  • 字符编码不统一:C#代码中明确使用UTF-8编码将私钥、消息字符串转换为字节数组参与哈希运算,PHP代码未对输入的$message、$PRIVATE_KEY做编码约束,如果这两个变量的原始编码不是UTF-8,计算出的哈希结果必然和C#不一致。
  • 哈希输出格式错误:PHP的hash_hmac函数第四个参数$raw_output如果被手动设置为true,会返回原始二进制数据,和C#输出的小写十六进制字符串格式不匹配。

修正后的PHP代码

// 统一输入编码为UTF-8,对齐C#逻辑
$utf8PrivateKey = mb_convert_encoding($PRIVATE_KEY, 'UTF-8', mb_detect_encoding($PRIVATE_KEY));
$utf8Message = mb_convert_encoding($message, 'UTF-8', mb_detect_encoding($message));
// 计算小写十六进制格式的HMAC-SHA256哈希
$hash = hash_hmac('sha256', $utf8Message, $utf8PrivateKey, false);
// 拼接最终结果
$digest = $PUBLIC_KEY . ':' . $hash;

验证方法

使用固定测试值分别在C#和PHP环境运行:

  • 公钥:test_pub
  • 私钥:test_pri
  • 消息:test_msg
    两边输出的digest完全一致即为适配成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:57:03