【问题标题】:API Signature using MD5 has as key for sha256使用 MD5 的 API 签名作为 sha256 的密钥
【发布时间】:2017-12-18 03:45:39
【问题描述】:

我正在尝试使用 Python 访问加密货币交易所 coinnest.co.kr 的交易 API。为此,我必须遵循此处的文档: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
                

现在我们使用 qwer-qewr-qwer-qwer 的 md5 哈希作为密钥,对上面的字符串进行 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"

【问题讨论】:

  • 我得到了 8 种不同的结果,尝试了各种形式的错字更正并尝试了它们给出的不同值,其中 none 是“66b ...”。
  • 问他们是个好问题。您还可以询问秘密的奇怪的未加盐 MD5 散列是为了什么,因为它不会增加任何安全性。
  • 看起来他们的文档可以使用澄清。我会给他们发一封电子邮件
  • "加密上面的字符串 by sha256" : 注意SHA256不是加密,它是一个密码散列。
  • 是的,谢谢大家的帮助。我还尝试了 8 种不同的结果,但无法得到结果。我也不确定他们为什么要散列密钥。

标签: python rest cryptography poloniex


【解决方案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'

看起来你做对了,但他们的 nonce 改变了,qwer-qewr-qwer-qwer 私钥是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 2016-08-12
    相关资源
    最近更新 更多