ビットスタンプの新しい認証は、次のように述べています。
署名は、ノンス、クライアント ID、および API キーを含む HMAC-SHA256 でエンコードされたメッセージです。HMAC-SHA256 コードは、API キーで生成された秘密鍵を使用して生成する必要があります。このコードは、16 進数表現 (大文字 64 文字) に変換する必要があります。アッパー()
出典:リンク
新しい署名 (およびその他のパラメーター) を追加する次のコードがあります。
public void AddApiAuthentication(RestRequest restRequest)
{
var nonce = DateTime.Now.Ticks;
var signature = GetSignature(nonce, apiKey, apiSecret, clientId);
restRequest.AddParameter("key", apiKey);
restRequest.AddParameter("signature", signature);
restRequest.AddParameter("nonce", nonce);
}
private string GetSignature(long nonce, string key, string secret, string clientId)
{
string msg = string.Format("{0}{1}{2}", nonce,
clientId,
key);
return ByteArrayToString(SignHMACSHA256(secret, StrinToByteArray(msg))).ToUpper();
}
public static byte[] SignHMACSHA256(String key, byte[] data)
{
HMACSHA256 hashMaker = new HMACSHA256(Encoding.ASCII.GetBytes(key));
return hashMaker.ComputeHash(data);
}
public static byte[] StrinToByteArray(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}
public static string ByteArrayToString(byte[] hash)
{
return BitConverter.ToString(hash).Replace("-", "").ToLower();
}
そして、私はこのエラーを受け取ります:
{"エラー": "無効な署名"}
誰が問題が何であるか考えましたか? パラメータを 100 回チェックしましたが、それらは間違っていません。たぶん、誰かが新しい認証のために (C# で) 動作するコードを手に入れたのでしょうか?
アップデート
Abhinav は正しく、StringToByteArray メソッドは間違っていました (タイプミスだけでなく:P) 作業コードは次のとおりです。
public static byte[] StrinToByteArray(string str)
{
return System.Text.Encoding.ASCII.GetBytes(str);
}