Bitstamp - новая аутентификация в C # - подпись
Новая аутентификация битовой метки говорит следующее:
Подпись - это сообщение в кодировке HMAC-SHA256, содержащее: nonce, идентификатор клиента и ключ API. Код HMAC-SHA256 должен быть создан с использованием секретного ключа, который был создан с вашим ключом API. Этот код должен быть преобразован в шестнадцатеричное представление (64 заглавных символа). Пример (Python): message = nonce + client_id + подпись api_key = hmac.new (API_SECRET, msg = message, digestmod = hashlib.sha256) .hexdigest (). верхняя ()
Источник:ссылка
У меня есть следующий код для добавления новой подписи (и других параметров):
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();
}
И тогда я получаю эту ошибку:
{"error": "Недопустимая подпись"}
Кто-нибудь понял, в чем может быть проблема? Я проверил свои параметры 100 раз, и это не так. Может быть, кто-то получил рабочий кусок кода (в C #) для новой аутентификации?
ОБНОВИТЬ
Абхинав был прав, метод StringToByteArray был неправильным (не только опечатка: P), рабочий код:
public static byte[] StrinToByteArray(string str)
{
return System.Text.Encoding.ASCII.GetBytes(str);
}