1

跟随 Perl 代码的 Python 等价物是什么?

hmac_md5_hex($login . "^" . $seq . "^" . $time . "^" . $amo . "^", $CryptoKey);

Python hashlib.md5 似乎没有采用“加密密钥”参数。它只接受 1 个参数。

4

3 回答 3

13

您必须将hmac 模块与 md5 或 sha 一起使用。默认情况下,它使用 md5:

In [1]: import hmac, hashlib
In [2]: hmac.new('key', 'msg').hexdigest()
Out[2]: '18e3548c59ad40dd03907b7aeee71d67'
In [3]: hmac.new('key2', 'msg').hexdigest()
Out[3]: 'a4bde113179bc2a7c6ac9ad7309ea073'
In [4]: hmac.new('key', 'msg', hashlib.sha256).hexdigest()
Out[4]: '2d93cbc1be167bcb1637a4a23cbff01a7878f0c50ee833954ea5221bb1b8c628'

您的示例可能类似于:

hmac.new(CryptoKey, '^'.join([login, seq, time, amo]), hashlib.md5).hexdigest()
于 2009-03-30T13:16:13.867 回答
3

看看这个关于 hmac 的 python 库文档

你可能想要的是:

import hmac
hmac_object = hmac.new(crypto_key)
hmac_object.update('^'.join([login, seq, time, amo, ''])
print hmac_object.hexdigest()

最好使用.update(),因为这样你就不必每次都实例化 hmac 类,如果你想要大量的十六进制消息摘要,它会大大提高性能。

于 2009-03-30T13:19:21.690 回答
0

另一种基于PyCrypto的解决方案:

from Crypto.Hash import HMAC
print HMAC.new(CryptoKey, '^'.join([login, seq, time, amo, ''])).hexdigest()
于 2012-03-01T15:19:54.400 回答