c# - 在 C# 中使用 Bittrex API 调用的无效签名

标签 c# api signature hmac

我正在尝试通过 Bittrex 的 API 调用访问我在 Bittrex 中的钱包余额,但出于某种原因,我收到的响应消息是 INVALID_SIGNATURE

我使用这些函数来创建签名:

GetNonce

private String GetNonce()
{
    long ms = (long)((DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds);

    return ms.ToString();
}

获取ApiSignature

private String GetApiSignature(String key, String message)
{
    using (var hmacsha512 = new HMACSHA512(Encoding.UTF8.GetBytes(key)))
    {
        hmacsha512.ComputeHash(Encoding.UTF8.GetBytes(message));
        return string.Concat(hmacsha512.Hash.Select(b => b.ToString("x2")).ToArray());
    }       
}

以下是我“编译”调用的方式:

public String ApiQuery(String requestUrl)
{

    url = new Uri(requestUrl);
    webreq = WebRequest.Create(url);

    signature = GetApiSignature(apiSecret, requestUrl);
    webreq.Headers.Add("apisign", signature );

    webresp = webreq.GetResponse();
    stream = webresp.GetResponseStream();
    strRead = new StreamReader(stream);

    String rtn = strRead.ReadToEnd();

    return rtn;
}

我得到了与 python API wrapper 相同的签名使用相同的 urlnonce 等,但无法访问我的余额。当我打一个不需要任何签名的电话时,它工作得很好......完全不确定我做错了什么。

最佳答案

从别处得到答案。看起来我的编码是错误的,因此它不起作用(虽然我想我尝试了其他编码器......)。

正确的编码是 ASCII,而我使用的是 UTF-8。

这是我得到的函数:

private string genHMAC(string secret, string url)
{
    var hmac = new HMACSHA512(Encoding.ASCII.GetBytes(secret));
    var messagebyte = Encoding.ASCII.GetBytes(url);
    var hashmessage = hmac.ComputeHash(messagebyte);
    var sign = BitConverter.ToString(hashmessage).Replace("-", "");

    return sign;
}

现在问题已经解决,一切正常。 :-)

关于c# - 在 C# 中使用 Bittrex API 调用的无效签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31073068/

相关文章:

c# - 使用 C# 和华为 E8372 加密狗发送短信

java - 使用 java 将 JSON 文档流式传输到 Rest Web 服务

java - 将字节数组转换为公钥 ECDSA

ruby - 在 Ruby 中生成 Paypal 签名, 'X-PAYPAL-AUTHORIZATION'

c# - 无论 .NET 版本如何,使用相同种子第 n 次调用 Random.Next() 是否总是产生相同的数字?

c# - 如何以编程方式设置 ItemsSource 属性?

c# - 在关闭表单之前提示用户提交更改

api - Golang - API Server 和 Socket 同时存在

api - 是否可以编写一个应用程序/程序来比较 Amazon Instant 和 Netflix Instant 库并找到每个库中缺少的标题?

rsa - 使用 SHA256 签名