【问题标题】:HMAC signing requests in PythonPython 中的 HMAC 签名请求
【发布时间】:2014-08-17 05:37:54
【问题描述】:

我正在尝试使用 requests 库为 Python 3.4 中的 API 调用创建 HMAC-SHA512 签名请求。我正在尝试关注文档,但遇到了这个错误:

AttributeError: '_hashlib.HASH' object has no attribute 'new'

这里有一些代码。它因 hmac 构造函数上的错误而失败。如果我尝试传递 hashlib.md5() 或完全省略摘要参数,那很好。

我不确定我之后是否正确签署了请求,因为我还没有做到这一点。我尝试使用的服务文档说用我的秘密签署 URL。我需要这是一个字节字符串才能工作。

import hmac
import hashlib
import requests

secret = b'mysecret'
url = b'http://someurl.com/something/'

signing = hmac.new(secret, url, hashlib.sha512())

headers = {'apisign': signing.digest()}
response = requests.get(url, headers=headers)

任何指针表示赞赏。我找不到一个例子。谢谢!

【问题讨论】:

    标签: python python-requests hmac hashlib


    【解决方案1】:

    您必须传入对 hashlib.sha512 可调用对象的引用,而不是调用它的结果:

    signing = hmac.new(secret, url, hashlib.sha512)
    

    或者,您可以只使用字符串'sha512'

    signing = hmac.new(secret, url, 'sha512')
    

    hashlib.new() 将用于构造散列对象。

    演示:

    >>> import hashlib
    >>> import hmac
    >>> secret = b'mysecret'
    >>> url = b'http://someurl.com/something/'
    >>> signing = hmac.new(secret, url, hashlib.sha512)
    >>> signing.digest()
    b'!~s2\x97\x97\xa9\xcc\xefcb\xa8\xcc\xa7\xbc\xec\xe5\xfc\xc3\xac\xfc\xbc5]\x05\x96\xc7\x83\x8b\x1b\x90\xd3\xa5\xca\x8cLsC\x17\xa0\xea\xa3\xfe\xd8M\xfda\x1epj\x90\xff}\xfa\xc2@\x92\xfb\xee\xa8\xab\x1b\x08\x8e'
    

    【讨论】:

      猜你喜欢
      • 2022-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多