我有一个Python2的脚本,效果很好.

def _generate_signature(data):
   return hmac.new('key', data, hashlib.sha256).hexdigest()

其中数据是json.dumps的输出.

现在,如果我try 在Python 3中运行相同类型的代码,我会得到以下结果:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.4/hmac.py", line 144, in new
    return HMAC(key, msg, digestmod)
  File "/usr/lib/python3.4/hmac.py", line 42, in __init__
    raise TypeError("key: expected bytes or bytearray, but got %r" %type(key).__name__)
TypeError: key: expected bytes or bytearray, but got 'str'

如果我try 像这样将密钥转换为字节:

bytes('key')

我明白了

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: string argument without an encoding

我仍在努力理解Python 3中的编码.

推荐答案

可以使用字节数:b'key'

def _generate_signature(data):
    return hmac.new(b'key', data, hashlib.sha256).hexdigest()

除此之外,还要确保data也是字节.例如,如果从文件中读取,则在打开文件时需要使用binary模式(rb).

Python-3.x相关问答推荐

Python网页抓取:代码输出:汤未定义

如何在python中有效地使用多处理和pytube库来加快下载速度?

如何定义既允许固定单词又允许模式的pydanti.BaseModel?

Python - 根据条件附加 NULL 值

Python根据条件从多行读取值

如何查找以开头并替换的字符串

Pandas 窗口聚合两个排序表

列出相同索引的Pandas

当我判断另一个 checkButton 时,如何判断两个 python tkinter checkButtons?

XPATH:使用 .find_elements_by_xpath 为未知数量的 xpath 输入值

如何在数据['column']中的'string'等条件下应用pandas

根据另一列值对多个数据框列进行分组

总结基于条件的值,如果不匹配则保留当前值

spinbutton调整up/down箭头

如何从字典中打印特定键值?

django.core.exceptions.ImproperlyConfigured

TypeError:列表索引必须是整数或切片,而不是列表

如何制作函数Collection

如何遍历某些扩展名的文件?

如何阻止散景在 Jupyter Notebook 中打开新标签?