You need to enable JavaScript to run this app. 从JavaScript迁移至C# .NET 如何正确实现HMACSHA1加密
优惠活动
大模型
产品
解决方案
定价
更多

从JavaScript迁移至C# .NET 如何正确实现HMACSHA1加密

问题原因及解决方案

你的C#代码有三处核心错误导致结果不一致,分别是:

  • 密钥值错误:JS代码中密钥为dBV2PdhYMnruSMb,你C#代码中多写了末尾的等号,变成了dBV2PdhYMnruSMb=
  • 密钥编码方式错误:crypto-js的HmacSHA1方法默认将传入的密钥字符串按UTF-8编码转为字节数组,你C#代码错误使用Convert.FromBase64String处理密钥,应该直接用UTF-8编码转换密钥
  • 结果输出格式错误:JS中toString()输出的是小写十六进制字符串,你C#代码错误将哈希结果转为Base64格式,应该转为小写十六进制字符串

修正后的C#代码

using System;
using System.Security.Cryptography;
using System.Text;

class Program
{
    static void Main()
    {
        string signSession = "application_id=3610&auth_key=aDRceQyTXSYEdJU&nonce=6304033672&timestamp=1623098533&user[login]=john@mail.com&user[password]=123456789";
        // 密钥和JS保持完全一致,去掉多余的等号
        string key = "dBV2PdhYMnruSMb";

        byte[] signatureBytes = Encoding.UTF8.GetBytes(signSession);
        // 密钥直接用UTF-8转字节数组,不要用Base64解码
        byte[] keyBytes = Encoding.UTF8.GetBytes(key);
             
        using(HMACSHA1 hmac = new HMACSHA1(keyBytes))
        {
            byte[] hashBytes = hmac.ComputeHash(signatureBytes);
            // 将哈希字节转为小写十六进制字符串,不要转Base64
            string hexSignature = BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
            Console.WriteLine(hexSignature);
        }
    }
}

运行上述代码输出结果为467280c4cb82fc97bd04c51d8a846446ad6e82e1,和JS运行结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 06:45:08