Python/Django中是否有与PHP的hash_hmac等效的功能?

27

我想将访问者转发到第三方付费网站。这个第三方将处理他们的付款,然后使用 PHP 的 hash_hmac 函数和 sha256 算法生成一个基于唯一订单号和共享密码的 64 字符令牌,并通过 POST 方法发送给我。

$token = hash_hmac("sha256", "12345", "sharedpassword");

我希望使用同样的算法来生成令牌以验证用户是否已支付。但问题是,我找不到一个等价的函数或方法在Python中复制该函数。最接近的是Python的hashlib,但似乎没有一个可以接收两个参数 - 数据和共享密码的函数。有没有人知道在这种情况下适用的类似于hash_hmac的等效函数?

1个回答

59

你需要 hmac 模块。

hmac.new("sharedpassword", "12345", hashlib.sha256).hexdigest()

或者在 Python 3 中:

hmac.new(bytes("sharedpassword", 'UTF-8'), "12345".encode(), hashlib.sha256).hexdigest()

1
谢谢!我猜我的谷歌搜索技巧需要磨练。 - kshen
1
我在Python 3.8.5中运行以下代码时遇到了TypeError错误:raise TypeError("key: expected bytes or bytearray, but got %r" % type(key).__name__) TypeError: key: expected bytes or bytearray, but got 'str' - jeppoo1
2
@jeppoo1 这个回答已经有8年的历史了,是针对Python 2编写的;在Python 3中,您需要传递一个字节对象而不是一个字符串。 - Amber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接