mis*_*ema 5 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();
}
Run Code Online (Sandbox Code Playgroud)
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());
}
}
Run Code Online (Sandbox Code Playgroud)
这是我如何"编译"我的电话:
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;
}
Run Code Online (Sandbox Code Playgroud)
我得到一个相同的签名与蟒蛇API包装用相同的确实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;
}
Run Code Online (Sandbox Code Playgroud)
问题现在已经解决,一切正常.:-)
归档时间: |
|
查看次数: |
3555 次 |
最近记录: |