来自https://www.mimecast.com/developer/documentation/downloading-siem-logs/的代码示例显示了一个脚本,该脚本可用于从Python2.7中的服务下载日志。
我正在更新脚本,以便与Python3兼容,但我不知道如何将字符串传递到hmac.new部分,以便在这里生成散列:
SECRET_KEY = 'SECRET KEY FOR YOUR ADMINISTRATOR'
secret_key = SECRET_KEY
def create_signature(data_to_sign, secret_key):
digest = hmac.new(secret_key.decode("base64"), data_to_sign, digestmod=hashlib.sha1).digest()
return base64.encodestring(digest).rstrip()
尝试按原样运行会导致"LookupError,'base64‘不是文本编码;使用codecs.decode()处理任意编解码器“
我试图通过在此函数之前或内部使用
base64.b64decode
或bytes(secret_key)
函数,但这会导致"TypeError,Unicode-对象必须在散列前编码“,我没有找到太多关于如何将字符串变量传递给hmac.new()的信息。
我非常确定这与python 2和3之间的变化有关,在3中字符串存储为unicode,而在2中是原始数据,但我对这些编码不够熟悉,无法理解在传递它们时如何正确转换它们
发布于 2018-07-20 03:32:17
错误消息将告诉您需要执行的操作:
TypeError, Unicode-objects must be encoded before hashing
要对Unicode对象(即str
)进行编码,只需调用它的encode
方法。
你必须决定你想要什么编码。通常,这是UTF-8。如果你使用的是现代的Python3,那么UTF-8肯定是默认的,所以你可以这样写:
secret_key_bytes = secret_key.encode()
如果您想要不同的编码(或者如果您想要UTF-8,但使用的是较旧的Python),请显式指定:
secret_key_bytes = secret_key.encode('Latin-1')
https://stackoverflow.com/questions/51430424
复制相似问题