Подпись API с использованием MD5 имеет ключ для sha256

Я пытаюсь использовать Python для доступа к торговому API на coinnest.co.kr, бирже криптовалют. Для этого я должен следовать документации, найденной здесь: https://www.coinnest.co.kr/doc/private.html

Получаем ключевую пару из открытого ключа: asdf-asdf-asdf-asdf и закрытого ключа: qwer-qewr-qwer-qwer.

Параметры запроса:

"key":"asdf-asdf-asdf-asdf",
"nonce":1505209177,
"coin":"btc",
"id":3

Тогда строка, которая будет подписана, будет:

key=asdf-asdf-asdf-asdf&nonce=1505209278&coin=btc&id=3
                

Теперь мы используем хэш md5 qwer-qewr-qwer-qwer в качестве ключа и шифруем приведенную выше строку с помощью sha256, и мы получаем 66b2935f3ba82a4a17074d439adab1043a63df4a177af68fe76a3f4f350ef55d, который будет использоваться в качестве подписи.

Моя текущая проблема заключается в том, что я не могу получить тот же результат, что и в примере. Я не уверен, что их пример точен. Является закрытым ключом qwer-qewr-qwer-qwer или qwer-qwer-qwer-qwer. Это одноразовый номер 1505209177 или 1505209278?

#!/usr/bin/python2.7
import hashlib
import hmac

secret = 'qwer-qewr-qwer-qwer'
message = 'key=asdf-asdf-asdf-asdf&nonce=1505209278&coin=btc&id=3'
key = hashlib.md5(secret).hexdigest()
print hmac.new(key, message, hashlib.sha256).hexdigest()

Используя приведенный выше код, я получаю подпись "afdfb1c331670d95c93868948ff769719b28d879ac94589fa44c4d5b8eacab04" по сравнению с ожидаемым результатом "66b2935f3ba82a4a17074d439adab1043a63df4a177af68fe76a3f4f350ef55d"


person tada23    schedule 18.12.2017    source источник
comment
Я получил 8 разных результатов, пробуя различные формы исправления опечаток и разные значения, которые они дают, и ни один из них не равен 66b....   -  person Ignacio Vazquez-Abrams    schedule 18.12.2017
comment
Это был бы отличный вопрос, чтобы задать им. Вы также можете спросить, для чего предназначено хэширование секрета MD5 без соли, поскольку оно не добавляет никакой безопасности.   -  person Klaus D.    schedule 18.12.2017
comment
Похоже, их документация нуждается в уточнении. я бы отправил им электронное письмо   -  person Peter Gibson    schedule 18.12.2017
comment
зашифровать указанную выше строку с помощью sha256 . Обратите внимание, что SHA256 — это не шифрование, а криптографический хэш.   -  person zaph    schedule 18.12.2017
comment
Да, спасибо всем за помощь. Я также пробовал 8 разных результатов и не смог получить результат. Я также не уверен, почему они хешируют секретный ключ.   -  person tada23    schedule 18.12.2017


Ответы (1)


Может быть, вы должны переборщить с документами API?

>>> secret1 = 'qwer-qewr-qwer-qwer'
>>> secret2 = 'qwer-qwer-qwer-qwer'
>>> message_template = 'key=asdf-asdf-asdf-asdf&nonce={}&coin=btc&id=3'
>>> target = '66b2935f3ba82a4a17074d439adab1043a63df4a177af68fe76a3f4f350ef55d'
>>> keys = [hashlib.md5(secret1).hexdigest(), hashlib.md5(secret1).digest(), hashlib.md5(secret2).hexdigest(), hashlib.md5(secret2).digest()]
>>> 
>>> for i in range(1505000000, 1506000000):
...     msg = message_template.format(i)
...     for key in keys:
...             if hmac.new(key, msg, hashlib.sha256).hexdigest() == target:
...                     print 'FOUND hmac', key, msg
...             if hashlib.sha256(key + msg).hexdigest() == target:
...                     print 'FOUND sha256', key, msg
... 
FOUND hmac fecfe400baa3ae47fe8c42f9c087ec90 key=asdf-asdf-asdf-asdf&nonce=1505209413&coin=btc&id=3

Что соответствует:

>>> keys.index('fecfe400baa3ae47fe8c42f9c087ec90')
0

Итак, должно работать следующее:

>>> hmac.new(hashlib.md5('qwer-qewr-qwer-qwer').hexdigest(), 'key=asdf-asdf-asdf-asdf&nonce=1505209413&coin=btc&id=3', hashlib.sha256).hexdigest()
'66b2935f3ba82a4a17074d439adab1043a63df4a177af68fe76a3f4f350ef55d'

Похоже, вы все делали правильно, но их одноразовый номер изменился, а закрытый ключ qwer-qewr-qwer-qwer правильный.

person Peter Gibson    schedule 18.12.2017