python - php hmac sha512签名在python中不起作用/不同
问题描述
我找不到签名密钥不同的问题。我认为它与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 中获取相同的代码时:
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=
解决方案
您在十六进制字符串上使用了 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=='
推荐阅读
- typescript - 如何在我的 React 项目中分析 TypeScript / TSLint 的缓慢处理瓶颈?
- r - 关于使用 R 创建子集
- javascript - 我可以使用 event.originalEvent 吗?
- r - 大数据的随机森林
- salesforce - 为什么我需要为 Queueable Apex 的每条记录设置 parentId
- java - 在弹性搜索休息高级客户端中遇到错误
- html - 如何溢出一行以在顶部放置图像?
- angular - 异步管道不适用于可观察的 rxjs
- python - 无限循环在哪里以及如何修复它?
- google-sheets - 基于集团交叉参考的总价值?(谷歌表格)