Bitstamp - Neue Authentifizierung in C # - Signatur
Die neue Authentifizierung von Bitstamp lautet wie folgt:
Die Signatur ist eine HMAC-SHA256-codierte Nachricht, die Folgendes enthält: Nonce, Client-ID und API-Schlüssel. Der HMAC-SHA256-Code muss mit einem geheimen Schlüssel generiert werden, der mit Ihrem API-Schlüssel generiert wurde. Dieser Code muss in seine hexadezimale Darstellung (64 Großbuchstaben) konvertiert werden. Beispiel (Python): message = nonce + client_id + api_key signature = hmac.new (API_SECRET, msg = message, digestmod = hashlib.sha256) .hexdigest (). Oberer, höher()
Quelle:Verknüpfung
Ich habe den folgenden Code zum Hinzufügen der neuen Signatur (und anderer Parameter):
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();
}
Und dann bekomme ich diesen Fehler:
{"error": "Invalid signature"}
Hat jemand eine Idee woran das liegen könnte? Ich habe meine Parameter 100 Mal überprüft und diese sind nicht falsch. Vielleicht hat jemand einen funktionierenden Code (in C #) für die neue Authentifizierung?
AKTUALISIEREN
Abhinav hatte Recht, die StringToByteArray-Methode war falsch (nicht nur der Tippfehler: P). Der Arbeitscode lautet:
public static byte[] StrinToByteArray(string str)
{
return System.Text.Encoding.ASCII.GetBytes(str);
}