Перевод строки кода с Python на C#
От: Passerby  
Дата: 12.06.21 18:31
Оценка:
passphrase = base64.b64encode(hmac.new(api_secret.encode(), api_passphrase.encode(), hashlib.sha256).digest()).decode()
Как то же на C#?
Re: Перевод строки кода с Python на C#
От: takTak  
Дата: 12.06.21 19:23
Оценка: +6


может, ты какую-нибудь книжку уже прочитаешь? или, на самом деле, всё так плохо?
Re: Перевод строки кода с Python на C#
От: Muxa  
Дата: 13.06.21 02:23
Оценка:
P>Как то же на C#?

Можно прямо также и написать
Re: Перевод строки кода с Python на C#
От: Kolesiki  
Дата: 13.06.21 04:18
Оценка: +1
Здравствуйте, Passerby, Вы писали:

P>passphrase = base64.b64encode(hmac.new(api_secret.encode(), api_passphrase.encode(), hashlib.sha256).digest()).decode()

P>Как то же на C#?

Что делают твои api_secret — одному богу известно, а с Base64 надо работать так: Convert.ToBase64String
Re: Перевод строки кода с Python на C#
От: varenikAA  
Дата: 13.06.21 05:52
Оценка:
Здравствуйте, Passerby, Вы писали:

P>passphrase = base64.b64encode(hmac.new(api_secret.encode(), api_passphrase.encode(), hashlib.sha256).digest()).decode()

P>Как то же на C#?

https://docs.microsoft.com/ru-ru/dotnet/standard/security/cryptography-model

https://habr.com/ru/post/254909/
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[2]: Перевод строки кода с Python на C#
От: Passerby  
Дата: 13.06.21 06:21
Оценка:
Здравствуйте, Kolesiki, Вы писали:
K>Что делают твои api_secret — одному богу известно, а с Base64 надо работать так: Convert.ToBase64String
Дело в том, что на stackoverflow есть есть работающий код:
import requests
import json
import hmac
import hashlib
import base64
from urllib.parse import urlencode
import time

api_key = 'xxxxx'
api_secret = 'xx-xxx-xx'
api_passphrase = 'xxx'   #this is NOT trading password
base_uri = 'https://api.kucoin.com'

def get_headers(method, endpoint):
    now = int(time.time() * 1000)
    str_to_sign = str(now) + method + endpoint
    signature = base64.b64encode(hmac.new(api_secret.encode(), str_to_sign.encode(), hashlib.sha256).digest()).decode()
    passphrase = base64.b64encode(hmac.new(api_secret.encode(), api_passphrase.encode(), hashlib.sha256).digest()).decode()
    return {'KC-API-KEY': api_key,
            'KC-API-KEY-VERSION': '2',
            'KC-API-PASSPHRASE': passphrase,
            'KC-API-SIGN': signature,
            'KC-API-TIMESTAMP': str(now)
    }

#List Orders
method = 'GET'
# endpoint = '/api/v1/orders'   #alternative endpoint
endpoint = '/api/v1/orders?status=active'
response = requests.request(method, base_uri+endpoint, headers=get_headers(method,endpoint))
print(response.status_code)
response.json()


Пытался аналогично получить message, но приходила ошибка "{\"code\":\"400004\",\"msg\":\"Invalid KC-API-PASSPHRASE\"}". Потому и решил, что может не так сделало шифрование.
public async Task GetOpenOrders()
{
string url = "https://api.kucoin.com";
string endpoint = "/api/v1/orders";
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, new Uri(url + endpoint));
var timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
var preSign = timestamp + "GET" + endpoint;
var hmac1 = new HMACSHA256(Encoding.UTF8.GetBytes(API_SECRET));
var signature = BitConverter.ToString(hmac1.ComputeHash(Encoding.UTF8.GetBytes(preSign))).ToLower().Replace("-", "");
var hmac2 = new HMACSHA256(Encoding.UTF8.GetBytes(API_SECRET));
var phrase = BitConverter.ToString(hmac2.ComputeHash(Encoding.UTF8.GetBytes(PASSPHRASE))).ToLower().Replace("-", "");

  request.Headers.Add("KC-API-KEY", API_KEY);
  request.Headers.Add("KC-API-SIGN", signature);
  request.Headers.Add("KC-API-TIMESTAMP", timestamp);
  request.Headers.Add("KC-API-PASSPHRASE", phrase);
  request.Headers.Add("KC-API-KEY-VERSION", "2");
  HttpResponseMessage response = await httpClient.SendAsync(request).ConfigureAwait(false);
  string message = await response.Content.ReadAsStringAsync();
  return message;//"{\"code\":\"400004\",\"msg\":\"Invalid KC-API-PASSPHRASE\"}"
}
Re[3]: Перевод строки кода с Python на C#
От: alexander_r  
Дата: 13.06.21 12:14
Оценка:
Здравствуйте, Passerby, Вы писали:

неужели к этому кукоину нету документации
мне кажется что даже готовые либы для дот нета можно найти
имхо проще предметно разобраться, что нужно делать, чем пытаться переписать г@внокод с одного языка на другой
Re[3]: Перевод строки кода с Python на C#
От: varenikAA  
Дата: 13.06.21 12:22
Оценка:
Здравствуйте, Passerby, Вы писали:

для начала сравни зашифрованный апи ключ на питоне и сишарпе. они точно одинаковые?
если нет по шагам разбери оба метода до точки где появятся расхождения.
выполни реверс-инежениринг
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: Перевод строки кода с Python на C#
От: varenikAA  
Дата: 13.06.21 12:32
Оценка:
Здравствуйте, Passerby, Вы писали:

P>passphrase = base64.b64encode(hmac.new(api_secret.encode(), api_passphrase.encode(), hashlib.sha256).digest()).decode()

P>Как то же на C#?

кстати, читали ли вы фак?

.net SDK

Invalid Signature on POST Request

{"code":"400005", "msg":"Invalid KC-API-SIGN"}
There is a bug in the code:
var response = body == null ? await _restRepo.PostApi, SortedDictionary>(url, body, headers) : await _restRepo.PostApi>(url, headers);
After fixing:
var response = body != null ? await _restRepo.PostApi, SortedDictionary>(url, body, headers) : await _restRepo.PostApi>(url, headers);


https://docs.kucoin.top/#faq
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[2]: Перевод строки кода с Python на C#
От: Passerby  
Дата: 13.06.21 13:08
Оценка:
Здравствуйте, varenikAA, Вы писали:
AA>кстати, читали ли вы фак?
Читал. Но у меня другая ошибка. В факе примерно тот же код, что и я ранее представил. Только в факе еще ошибки: url = 'https://openapi-sandbox.kucoin.com/api/v1/accounts' — нет такого адреса. Сейчас новый адрес.
Re[3]: Перевод строки кода с Python на C#
От: Ватакуси Россия  
Дата: 14.06.21 10:04
Оценка:
Здравствуйте, Passerby, Вы писали:

Ты пошагово сравнил результат-то? Всё совпадает до точки вызова? Ошибка говорит, что ты чё-то не так сделал.
Все будет Украина!
Re[4]: Перевод строки кода с Python на C#
От: Passerby  
Дата: 14.06.21 13:00
Оценка:
Здравствуйте, Ватакуси, Вы писали:
В>Ты пошагово сравнил результат-то? Всё совпадает до точки вызова?
Я не знаю Python (иначе бы не задавал вопрос), какой там отладчик, классы там или нет, куда там встраивать код метода и т.д., потому не сравнивал.
В>Ошибка говорит, что ты чё-то не так сделал.
Глубокая мысль...
Re[3]: Перевод строки кода с Python на C#
От: Буравчик Россия  
Дата: 14.06.21 13:19
Оценка: 2 (1)
Здравствуйте, Passerby, Вы писали:

P>Пытался аналогично получить message, но приходила ошибка "{\"code\":\"400004\",\"msg\":\"Invalid KC-API-PASSPHRASE\"}". Потому и решил, что может не так сделало шифрование.


If you get such an error, then you did not (or not correctly) follow step 2 of the instructions:


https://cointracking.freshdesk.com/en/support/solutions/articles/29000028973-kucoin-api-error-code-400004-msg-invalid-kc-api-passphrase-
Best regards, Буравчик
Re[4]: Перевод строки кода с Python на C#
От: Passerby  
Дата: 14.06.21 14:33
Оценка:
Здравствуйте, Буравчик, Вы писали:
Б>https://cointracking.freshdesk.com/en/support/solutions/articles/29000028973-kucoin-api-error-code-400004-msg-invalid-kc-api-passphrase-
Спасибо. Сегодня в пятый раз создал ключи и как указано в статье сделал еще одни ключ, секрет, название API и парольную фразу. Но чуда не произошло. Хотя, мне кажется, что дело, действительно, в ключах, а не в коде.
"@kroitor, @IanFLee I just now tried to create a new API and I used the API Passphrase as password with @kroitors code above. Now it actually worked. This didn't work yesterday as I created 4 new API in the exact same way. That was very strange. I know I tried the exact same thing with the API Passphrase but now it worked. I am not sure if there was any temporary problem with their API?"
https://github.com/ccxt/ccxt/issues/8994
Re[5]: Перевод строки кода с Python на C#
От: Ватакуси Россия  
Дата: 14.06.21 15:21
Оценка: +1
В>>Ты пошагово сравнил результат-то? Всё совпадает до точки вызова?
P>Я не знаю Python (иначе бы не задавал вопрос), какой там отладчик, классы там или нет, куда там встраивать код метода и т.д., потому не сравнивал.

Ну, это можно за 1 с установкой питона, среды какой-нить и отладки сделать. Никто кроме тебя этим не займётся. По крайней мере, бесплатно

В>>Ошибка говорит, что ты чё-то не так сделал.

P>Глубокая мысль...
А то.
Все будет Украина!
Re[3]: Перевод строки кода с Python на C#
От: Kolesiki  
Дата: 14.06.21 15:57
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Дело в том, что на stackoverflow есть есть работающий код:

P> signature = base64.b64encode(hmac.new(api_secret.encode(), str_to_sign.encode(), hashlib.sha256).digest()).decode()
P> passphrase = base64.b64encode(hmac.new(api_secret.encode(), api_passphrase.encode(), hashlib.sha256).digest()).decode()

P>Пытался аналогично получить message, но приходила ошибка "{\"code\":\"400004\",\"msg\":\"Invalid KC-API-PASSPHRASE\"}". Потому и решил, что может не так сделало шифрование.


P>var preSign = timestamp + "GET" + endpoint;

P>var hmac1 = new HMACSHA256(Encoding.UTF8.GetBytes(API_SECRET));
P>var signature = BitConverter.ToString(hmac1.ComputeHash(Encoding.UTF8.GetBytes(preSign))).ToLower().Replace("-", "");
P>var hmac2 = new HMACSHA256(Encoding.UTF8.GetBytes(API_SECRET));
P>var phrase = BitConverter.ToString(hmac2.ComputeHash(Encoding.UTF8.GetBytes(PASSPHRASE))).ToLower().Replace("-", "");

Не увидел у тебя ни строчки касательно Base64 — уверен, что правильно перевёл?
Re[4]: Перевод строки кода с Python на C#
От: Passerby  
Дата: 14.06.21 16:29
Оценка:
Здравствуйте, Kolesiki, Вы писали:
K>Не увидел у тебя ни строчки касательно Base64 — уверен, что правильно перевёл?
Конечно, не уверен. Был бы уверен, не спрашивал бы.
public async Task<string> GetOpenOrdersForStackoverflow()
    {
      string url = "https://api.kucoin.com";
      string endpoint = "/api/v1/orders";
      HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, new Uri(url + endpoint));
      var API_TIMESTAMP = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
      var preSign = API_TIMESTAMP + "GET" + endpoint;
      var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(secret));
      var API_SIGN = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(preSign))).ToLower().Replace("-", "");
      // /*пробовал и так:*/ var API_SIGN = BitConverter.ToString(hmac.ComputeHash(Encoding.UTF8.GetBytes(preSign))).ToLower().Replace("-", "");     
      //Та же ошибка
      var API_PASSPHRASE = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(PASSPHRASE))).ToLower().Replace("-", "");
      // /*пробовал и так: */var API_PASSPHRASE = BitConverter.ToString(hmac.ComputeHash(Encoding.UTF8.GetBytes(PASSPHRASE))).ToLower().Replace("-", "");
      //Та же ошибка
      request.Headers.Add("KC-API-KEY", API_KEY);
      request.Headers.Add("KC-API-SIGN", API_SIGN);
      request.Headers.Add("KC-API-TIMESTAMP", API_TIMESTAMP);
      request.Headers.Add("KC-API-PASSPHRASE", API_PASSPHRASE);
      request.Headers.Add("KC-API-KEY-VERSION", "2");
      HttpResponseMessage response = await httpClient.SendAsync(request).ConfigureAwait(false);
      string message = await response.Content.ReadAsStringAsync();
      return message;//"{\"code\":\"400004\",\"msg\":\"Invalid KC-API-PASSPHRASE\"}"
    }

Неправильно?
Отредактировано 14.06.2021 16:34 Passerby . Предыдущая версия . Еще …
Отредактировано 14.06.2021 16:31 Passerby . Предыдущая версия .
Отредактировано 14.06.2021 16:30 Passerby . Предыдущая версия .
Re[5]: Перевод строки кода с Python на C#
От: alexander_r  
Дата: 14.06.21 16:47
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Неправильно?


А кто кроме вас может это проверить

Еще один вариант -> https://github.com/shendongnian/code/blob/d29ee0b912c7213ff4b536ca0525807551bfd19b/code10/1720192-49954862-0.cs
Вообще на github-е проектов достаточно много где этот kucoin изпользуют

https://github.com/search?l=C%23&amp;q=kucoin&amp;type=Repositories
и если уже совсем голову лень включать и читать доки, можно просто нагуглить готового кода и сделать по аналогии
Отредактировано 14.06.2021 17:22 alexander_r . Предыдущая версия . Еще …
Отредактировано 14.06.2021 17:02 alexander_r . Предыдущая версия .
Отредактировано 14.06.2021 16:57 alexander_r . Предыдущая версия .
Re[6]: Перевод строки кода с Python на C#
От: Passerby  
Дата: 14.06.21 17:30
Оценка:
Здравствуйте, alexander_r, Вы писали:

_>Здравствуйте, Passerby, Вы писали:


P>>Неправильно?


_>А кто кроме вас может это проверить

Kolesiki написал, что у меня ошибка, поэтому и написал.

_>Еще один вариант -> https://github.com/shendongnian/code/blob/d29ee0b912c7213ff4b536ca0525807551bfd19b/code10/1720192-49954862-0.cs

_>Вообще на github-е проектов достаточно много где этот kucoin изпользуют
Вы указали на проект со старым API.

_>https://github.com/search?l=C%23&amp;q=%22https%3A%2F%2Fapi.kucoin.com%22&amp;type=Code

Либо старый API, либо библиотека, либо предлагается свой nuget, либо что-то вообще не нужное (даже пустой проект встречался).
_>и если уже совсем голову лень включать и читать доки, можно просто нагуглить готового кода и сделать по аналогии
Уже. А вы можете продемонстрировать, как включать голову?
Re[7]: Перевод строки кода с Python на C#
От: alexander_r  
Дата: 14.06.21 19:29
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Либо старый API, либо библиотека, либо предлагается свой nuget, либо что-то вообще не нужное (даже пустой проект встречался).


А в чем проблема взять готовую библиотеку или nuget и посмотреть будет она работать с вашими api_secret, api_key... или нет
если работает, то смотрите каким образом она создает заголовки, если не работает — пишите в поддержку
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.