如何解决Python3和hmac如何处理不是二进制的字符串
您可以使用字节字面量: b'key'
def _generate_signature(data):
return hmac.new(b'key', data, hashlib.sha256).hexdigest()
除此之外,请确保data
也是字节。例如,如果从文件中读取文件,则在打开文件时需要使用binary
模式(rb
)。
解决方法
我在Python2中有个脚本,效果很好。
def _generate_signature(data):
return hmac.new('key',data,hashlib.sha256).hexdigest()
数据是的输出json.dumps
。
现在,如果我尝试在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'
如果我尝试将密钥转换为字节这样的操作:
bytes('key')
我懂了
Traceback (most recent call last):
File "<stdin>",in <module>
TypeError: string argument without an encoding
我仍在努力理解Python 3中的编码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。