8

我无法弄清楚“字节”方法在抱怨什么。在下面的代码中,我正在尝试为我的客户端生成身份验证密钥,但我不断收到此错误 [1]

import hmac
import hashlib
import base64

message = bytes("Message", 'utf-8') # errors here
secret = bytes("secret", 'utf-8')

signature = base64.b64encode(hmac.new(secret, message, digestmod=hashlib.sha256).digest());
print(signature)

[1]

Traceback (most recent call last):
  File "API/test/auth-client.py", line 11, in <module>
    message = bytes("Message", 'utf-8')
TypeError: str() takes at most 1 argument (2 given)
4

3 回答 3

6

您遇到此问题的可能原因是您使用的代码是为 Python 3.x 编写的,并且您在 Python 2.x 下执行了它。

我知道有人已经部分说明了这一点,但我认为让 Python 新手更清楚可能会有所帮助,他们可能没有意识到为什么使用 'utf-8' 参数,因为提出问题的人指出他们确实这样做了不知道争论是为了什么。

任何来到这里的人都可能会发现这有助于理解为什么会有“utf-8”的争论。

于 2014-06-12T19:54:13.010 回答
6

bytes()在 Python 2.x 中是一样的str(),它只接受一个字符串参数。

只使用message = "Message"secret = "secret"。你甚至不需要bytes()这里。

于 2013-08-31T22:11:14.143 回答
1

尝试,

import hmac
import hashlib
import base64

message = bytes("Message")
secret = bytes("secret")

signature = base64.b64encode(hmac.new(secret, message, digestmod=hashlib.sha256).digest())
print(signature)
于 2013-08-31T22:07:18.100 回答