我已经获得了以下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"));
}
非常感谢您的帮助。