温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - php hmac sha512 signature not working/different then in python
php python hmac

其他 - php hmac sha512签名无法正常工作/然后在python中

发布于 2020-04-04 00:02:38

我找不到签名密钥为何不同的问题。我认为这与python有关,它需要输入字节。但是两种语言的输出是完全不同的。不知道这是怎么回事。

API_SECRET = 'ErLN2dewKAfY5j4bHOIFQaCKogJIv8Tq'

的PHP

$digest2 = [
'486',
'GET',
'/orderlist',
'2.0',
'2020-01-29T11:45:47+01:00'];

print_r(base64_encode(hash_hmac('sha512', implode('', $digest2), $this->_API_SECRET, true)));

它会给出以下代码:

BsPgLClFDYl6oMRXkph7sz3opLeRAenzZ1w1X5fhiyDC4WVZViTvIWnLZWb1lQDVCRZ2/MkPT8irU9gax3m2Iw==

但是当我尝试在python中获得相同的代码时:

蟒蛇

digest2 =['486','GET','/orderlist','2.0','2020-01-29T11:45:47+01:00']
#token = hmac.new(bytes('API_SECRET'.encode("utf-8")), msg=bytes(''.join(digest2 ).encode("utf-8")), digestmod=hashlib.sha512).hexdigest()
digest = hmac.new(bytes('API_SECRET'.encode("utf-8")), bytes(''.join(digest2 ),"utf-8"), digestmod=hashlib.sha512).hexdigest()
return base64.b64encode(digest.encode("utf-8"))

它将给出以下代码:

b'YThhNGI0ZGZkN2Q5YmJmNDg5OTJmNzE1NGZiMWQyMWExYzQyODU3OGUxNmQ1ZTRkZWUxOGViZTUxNmFhM2M4MGZmZTYzMTJhNWNhYWQ5MDg3NDdlMGQ0NDBmMDliZThkNTA2ODA1YTlkMjJmZGMwZTk3NjVkNmM2MmE0NTViMjQ=

查看更多

提问者
ftft32
被浏览
17
hurlenko 2020-01-31 20:19

您在十六进制字符串上使用了base64编码。另外,您还用作API_SECRET字符串而不是变量。这是工作解决方案

import hashlib
import hmac
import base64

API_SECRET = "ErLN2dewKAfY5j4bHOIFQaCKogJIv8Tq"
digest2 = ["486", "GET", "/orderlist", "2.0", "2020-01-29T11:45:47+01:00"]
digest = hmac.new(
    API_SECRET.encode("utf-8"),
    "".join(digest2).encode("utf-8"),
    digestmod=hashlib.sha512,
).digest()
print(base64.b64encode(digest))

版画

'BsPgLClFDYl6oMRXkph7sz3opLeRAenzZ1w1X5fhiyDC4WVZViTvIWnLZWb1lQDVCRZ2/MkPT8irU9gax3m2Iw=='