相当于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; } }
看起来差异来自秘密编码的方式。 在节点版本中,它假定它代表一个base64编码的字节数组,而在你的C#版本中,你把它当作普通的string。
所以在你的C#版本中,从base 64编码的密钥中读取字节数组:
var secretBytes = Convert.FromBase64String(secret);
现在你符合节点版本:
var hmac = crypto.createHmac('sha512', new Buffer(this.secret, 'base64'));