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

C# HMACMD5哈希结果与可用JS代码不一致,求等效实现

如何在C#中复现CryptoJS.HmacMD5(message, secretkey).toString()的功能

你的C#代码存在两个核心问题,导致和CryptoJS的结果不一致:

  • 消息与密钥的参数顺序搞反:HMAC算法需要先传入密钥初始化,再对消息计算哈希,你现在把两者颠倒了
  • 多余的二次哈希计算:代码里额外对生成的十六进制字符串再哈希,这和CryptoJS的逻辑完全无关

正确的C#实现代码

public static string HashHmacMD5(string message, string secret)
{
    Encoding encoding = Encoding.UTF8;
    // 用密钥(secret)初始化HMACMD5实例
    using (HMACMD5 hmac = new HMACMD5(encoding.GetBytes(secret)))
    {
        // 对目标消息(message)计算HMAC-MD5哈希
        byte[] hashBytes = hmac.ComputeHash(encoding.GetBytes(message));
        // 将哈希字节数组转换为小写十六进制字符串,匹配CryptoJS的toString()输出格式
        return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
    }
}

逻辑说明

CryptoJS的CryptoJS.HmacMD5(message, secretkey).toString()执行流程是:

  1. 使用UTF-8编码将secretkey转为字节数组作为HMAC密钥
  2. 使用UTF-8编码将message转为字节数组作为待哈希的内容
  3. 计算HMAC-MD5哈希值
  4. 将哈希字节数组转换为小写的十六进制字符串

上面的C#代码完全对齐了这个流程,用相同的message和secretkey测试就能得到和JS一致的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:43:16