在Python中实现SHA1-HMAC

2024-04-20 01:45:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为python(v3.7)实现SHA1-HMAC生成,以便能够创建HMAC代码。在

我使用了一个包含以下数据的online generator to create SHA1-HMAC

  • 字符串:'123'
  • 密钥:'secret'
  • 摘要算法:SHA1

我得到的结果是:

b14e92eb17f6b78ec5a205ee0e1ab220fb7f86d7

然而,当我尝试用Python做同样的事情时,我得到的结果却不同,这是错误的。在

^{pr2}$

此代码给出结果:

sU6S6xf2t47FogXuDhqyIPt_htc=

这个代码可能有什么问题?在


Tags: to数据字符串代码算法secret错误create
1条回答
网友
1楼 · 发布于 2024-04-20 01:45:44

你不应该在这里使用Base64。链接到的站点提供摘要字节的十六进制值。在Python中,使用^{} method可以获得相同的十六进制值:

>>> key = b'secret'
>>> message = b'123'
>>> digester = hmac.new(key, message, hashlib.sha1)
>>> digester.hexdigest()
'b14e92eb17f6b78ec5a205ee0e1ab220fb7f86d7'

换句话说,您的代码输出正确的值,但是作为Base64编码的数据:

^{pr2}$

您在线生成的值包含与十六进制摘要完全相同的字节,因此我们可以为此生成相同的base64输出:

>>> bytes.fromhex('b14e92eb17f6b78ec5a205ee0e1ab220fb7f86d7')
b'\xb1N\x92\xeb\x17\xf6\xb7\x8e\xc5\xa2\x05\xee\x0e\x1a\xb2 \xfb\x7f\x86\xd7'
>>> base64.urlsafe_b64encode(bytes.fromhex('b14e92eb17f6b78ec5a205ee0e1ab220fb7f86d7'))
b'sU6S6xf2t47FogXuDhqyIPt_htc='

相关问题 更多 >