C# 来自C的hmacSHA384#

C# 来自C的hmacSHA384#,c#,.net,hmacsha1,C#,.net,Hmacsha1,我有一个code.PHP代码,它生成sha384哈希字符串。类似于下面的代码 $hash=hash_hmac(“sha384”, $aid . $amount . $version . $currency . $mid . $mode. $request . $responsetype, $key); 我想从c#生成这个哈希代码hma

我有一个code.PHP代码,它生成sha384哈希字符串。类似于下面的代码

$hash=hash_hmac(“sha384”, $aid .
          $amount .
          $version .
          $currency .
          $mid .
          $mode.
          $request .
          $responsetype, 
          $key);
我想从c#生成这个哈希代码hmacSHA384。 我试过几种方法。但这并没有像我预期的那样奏效

string val = string.Concat( int aid, int amount, string version, string currency,int mid, string mode, string request, string responsetype);

private static byte[] hmacSHA384(string val,string key)
            {
                using (HMACSHA384 hmac = new HMACSHA384(Encoding.ASCII.GetBytes(key))
                {
                    return hmac.ComputeHash(Encoding.ASCII.GetBytes(val));
                }
            }
我应该如何转换它?

在C#中,您必须先将每个项目转换为字符串,然后才能连接它们。您有几个选择:

  • 对每个值调用
    .ToString()
    ,然后连接字符串,例如

    string val = aid.ToString() + amount.ToString() + ...
    
  • 使用String.Format(C#的printf-like函数)构造字符串

    string val = String.Format("{0}{1}{2}[3}{4}{5}{6}{7}", aid, amount, ... );
    
    它将把每个值呈现为一个字符串

  • 但新的字符串插值语法可能是最简单的方法:

    string val = $"{aid}{amount}{version}{currency}{mid}{mode}{request}{responsetype}";
    

  • 我按照普通的c#hmacSHA384生成代码。如果你看我的代码。在c#中,我使用了唯一的关键参数。我没有在这里使用任何其他参数。那么我应该如何添加剩余的参数呢?作为字节数组或??PHP在散列结果之前将所有参数连接在一起(可能是字符串?)。我建议您尝试找到一个确切的哈希示例,这样您就可以用C#编写一个测试用例。是的,这种连接是正确的。我据此修改了我的答案。