在 C# 中使用 Bittrex API 调用的无效签名
Invalid signature with Bittrex API calls in C#
我正在尝试通过 Bittrex 的 API 调用访问我在 Bittrex 中的钱包余额,但出于某种原因,我收到的响应消息是 INVALID_SIGNATURE
.
我使用这些函数来创建签名:
GetNonce
private String GetNonce()
{
long ms = (long)((DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds);
return ms.ToString();
}
GetApiSignature
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());
}
}
以下是我 "compile" 我的通话方式:
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 相同的签名,url
和 nonce
等,但无法访问我的余额。当我打一个不需要任何签名的电话时,它工作得很好......完全不确定我做错了什么。
从别处得到答案。看起来我的编码是错误的,因此它没有工作(虽然我想我尝试了其他编码器......)。
正确的编码是 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;
}
问题现已解决,一切正常。 :-)
看看这个功能,它对我来说工作正常并经过测试。
函数计算符号(url){
变量符号=crypto.createHmac('sha512',constants.bittrexCredentials.SECRET);
sign = sign.update(url,'ascii');
sign = sign.digest('hex');
return sign;
我正在尝试通过 Bittrex 的 API 调用访问我在 Bittrex 中的钱包余额,但出于某种原因,我收到的响应消息是 INVALID_SIGNATURE
.
我使用这些函数来创建签名:
GetNonce
private String GetNonce()
{
long ms = (long)((DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds);
return ms.ToString();
}
GetApiSignature
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());
}
}
以下是我 "compile" 我的通话方式:
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 相同的签名,url
和 nonce
等,但无法访问我的余额。当我打一个不需要任何签名的电话时,它工作得很好......完全不确定我做错了什么。
从别处得到答案。看起来我的编码是错误的,因此它没有工作(虽然我想我尝试了其他编码器......)。
正确的编码是 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;
}
问题现已解决,一切正常。 :-)
看看这个功能,它对我来说工作正常并经过测试。
函数计算符号(url){ 变量符号=crypto.createHmac('sha512',constants.bittrexCredentials.SECRET);
sign = sign.update(url,'ascii');
sign = sign.digest('hex');
return sign;