将Node.js HMAC转换为C#

时间:2019-07-03 23:13:55

标签: c# node.js

我已经获得了以下nodejs代码并生成了签名。此签名由第三方生成,我需要在C#中的后端API上验证其签名。他们的代码是:

const crypto = require("crypto");
const secret = "..."; //do not share!
const actualSignature = crypto
  .createHmac("sha256", Buffer.from(secret , "hex"))
  .update(request.body, "utf-8")
  .digest("hex");

我尝试用C#实现,但是我有能力让我的签名与他们的签名相匹配。到目前为止,这是我的代码:

    public byte[] GetHash(string body, string secret)
    {
        var secretBytes = Encoding.UTF8.GetBytes(secret);
        var hexSharedSecretBytes = ByteToHexadecimalString(secretBytes);
        var hexSecretBytes = Encoding.UTF8.GetBytes(hexSharedSecretBytes);

        var hmac = new HMACSHA256(hexSecretBytes);

        var bodyBytes = Encoding.UTF8.GetBytes(body);
        return hmac.ComputeHash(bodyBytes);
    }

    private string ByteToHexadecimalString(byte[] buff)
    {
        return buff.Aggregate("", (current, i) => current + i.ToString("x2"));
    }

非常感谢您的帮助。

0 个答案:

没有答案