Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用MD5的API签名作为sha256的密钥_Python_Rest_Cryptography_Poloniex - Fatal编程技术网

Python 使用MD5的API签名作为sha256的密钥

Python 使用MD5的API签名作为sha256的密钥,python,rest,cryptography,poloniex,Python,Rest,Cryptography,Poloniex,我正在尝试使用Python访问coinnest.co.kr(加密货币交易所)的交易API。为此,我必须遵循以下文档: 我们得到一对公钥:asdf asdf asdf和私钥:qwer qewr qwer qwer 请求参数包括: 那么要签名的字符串将是: 现在我们使用qwer qewr qwer qwer的md5散列作为密钥,并使用sha256对上述字符串进行加密,得到66b2935f3ba82a4a17074d439adab1043a63df4a177af68fe76a3f4f350ef55d,

我正在尝试使用Python访问coinnest.co.kr(加密货币交易所)的交易API。为此,我必须遵循以下文档:

我们得到一对公钥:asdf asdf asdf和私钥:qwer qewr qwer qwer

请求参数包括:

那么要签名的字符串将是:

现在我们使用qwer qewr qwer qwer的md5散列作为密钥,并使用sha256对上述字符串进行加密,得到66b2935f3ba82a4a17074d439adab1043a63df4a177af68fe76a3f4f350ef55d,将其用作签名

我目前的问题是,我无法得到与示例相同的结果。我不确定他们的例子是否准确。是私钥“qwer qewr qwer qwer”或“qwer qwer qwer”。现在是“1505209177”还是“1505209278”

使用上述代码,我获得了“afdfb1c331670d95c93868948ff769719b28d879ac94589fa44c4d5b8eacab04”的签名,与
“66b2935f3ba82a4a17074d439adab1043a63df4a177af68fe76a3f4f350ef55d”

也许你应该强制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-qwr-qwer-qwer
私钥是正确的。

我已经得到了8个不同的结果,尝试了各种形式的拼写更正,尝试了它们给出的不同值,没有一个是“66b…”。这将是一个很好的问题。你也可以问这个秘密的weired unsalted MD5哈希是为了什么,因为它没有增加任何安全性。看起来他们的文档可能需要澄清。我会给他们发一封电子邮件“用sha256加密上面的字符串”:注意sha256不是加密,它是加密散列。是的,谢谢大家的帮助。我还尝试了8种不同的结果,但没有得到结果。我也不知道他们为什么散列密钥。
>>> 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'