微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python3和hmac如何处理不是二进制的字符串

如何解决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 举报,一经查实,本站将立刻删除。