c等价于nodejs代码

本文关键字:代码 nodejs 等价于 | 更新日期: 2023-09-27 18:26:00

我需要下面nodejs代码的c#等价物。我有一些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;
        }
    }

c等价于nodejs代码

看起来区别来自于秘密的编码方式。在节点版本中,它假设它表示一个base64编码的字节数组,而在C#版本中,您将其视为一个普通字符串。

因此,在您的C#版本中,从基64编码的秘密读取字节数组:

var secretBytes = Convert.FromBase64String(secret);

现在您与节点版本一致:

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