相当于nodejs代码的c#

我需要c#相当于下面的nodejs代码。 我有一些C#代码,但结果是不一样的。

//下面的工作节点代码

Ice3x.prototype._signMessage = function (message) { var hmac = crypto.createHmac('sha512',new Buffer(this.secret, 'base64')); hmac.update(message); var signature = hmac.digest('base64'); return signature; } 

//下面的c#代码

  public class HmacSignatureCalculator : ICalculteSignature { public string Signature(string secret, string value) { var secretBytes = Encoding.UTF8.GetBytes(secret); var valueBytes = Encoding.UTF8.GetBytes(value); string signature; using (var hmac = new HMACSHA512(secretBytes)) { var hash = hmac.ComputeHash(valueBytes); signature = Convert.ToBase64String(hash); } return signature; } } 

       

网上收集的解决方案 "相当于nodejs代码的c#"

看起来差异来自秘密编码的方式。 在节点版本中,它假定它代表一个base64编码的字节数组,而在你的C#版本中,你把它当作普通的string。

所以在你的C#版本中,从base 64编码的密钥中读取字节数组:

 var secretBytes = Convert.FromBase64String(secret); 

现在你符合节点版本:

 var hmac = crypto.createHmac('sha512', new Buffer(this.secret, 'base64'));