当前位置: 首页 > 面试题库 >

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

彭海阳
2023-03-14
问题内容

我在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>", 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)。



 类似资料:
  • 例如,我有一个这样的字符串(返回值的): 无论我对它做了什么,它总是在字符串前打印恼人的: 有人对如何将其用作普通字符串或将其转换为普通字符串有什么想法吗?

  • 我有一个字符串。我想从中提取。为此,我正在努力 但是在输出上我得到了。 我怎样才能走出地狱世界。 谢谢

  • 如何比较字符串二进制(而不是字母数字)?? Torrent规格: 键必须是字符串,并且以排序顺序出现(排序为原始字符串,而不是字母数字)。应该使用二进制比较,而不是特定于区域性的“自然”比较来比较字符串。 所以我需要按键对口供进行排序...但我没有这个规格。解释..有人吗? 更新:http://docs.oracle.com/cd/b19306_01/server.102/b14225/ch5li

  • 问题内容: 当我运行它时,它抱怨: 但是我不能使用,因为它会抱怨: 有人知道如何处理吗? 问题答案: 您可以使用urllib.parse.quote()对URL的路径部分进行编码。

  • 我在理解JavaIO类中的一些概念时有些困难。例如,有两种类型的流,字节流和字符流。据我所知,字节流逐个字节读取。 1.如果java中的char存储为16位(2字节)的数据类型,那么我怎么可能使用面向字节的输入流从文件中准确读取char,比如'A',例如FileInputStream? 2。是因为我使用的字符(在ascii图表上大多在0到122之间)存储在分配的两个字节中的一个字节中吗? 3. D

  • 问题内容: 我想将二进制字符串转换为数字Eg 这怎么可能?谢谢 问题答案: 该函数将字符串转换为数字,并使用第二个参数来指定字符串表示形式的基数: 看到它在行动 。