我正在尝试将在“ https://developers.coinbase.com/docs/wallet/api-key-authentication#”中找到的python代码转换为C#。
我已经能够很好地转换它,但是我在如何构造签名以及如何对其进行哈希处理方面遇到了麻烦。
我收到此{“ errors”:[{“ id”:“ authentication_error”,“ message”:“无效签名”}]} 正如您所看到的,没有有关导致错误的原因的信息。而且没有解决方法。
hmac.new(self.secret_key, message, hashlib.sha256).hexdigest()
在C#中不是一个线性函数。而且散列超出了我的经验范围。
我将其作为我拥有的功能。这是对的吗?同样对于我要发送的JSON,我使用NewtonSoft将其从Diction转换为字符串。这也正确吗?
哈希函数:
byte[] secretKey = Encoding.UTF8.GetBytes(apiSecret);
HMACSHA256 hmac = new HMACSHA256(secretKey);
hmac.Initialize();
byte[] bytes = Encoding.UTF8.GetBytes(message);
byte[] rawHmac = hmac.ComputeHash(bytes);
var signature = ByteArrayToHexString(rawHmac);
static string ByteArrayToHexString(byte[] bytes)
{
char[] c = new char[bytes.Length * 2];
int b;
for (int i = 0; i < bytes.Length; i++)
{
b = bytes[i] >> 4;
c[i * 2] = (char)(55 + b + (((b - 10) >> 31) & -7));
b = bytes[i] & 0xF;
c[i * 2 + 1] = (char)(55 + b + (((b - 10) >> 31) & -7));
}
return new string(c);
}
我应该可以通过身份验证,并且可以进行交易。但是没有任何效果。我应该如何进行调试?那我下一步应该怎么做?