Python3使用hashlib调用服务时MD5字节解码报错求助
解决
UnicodeDecodeError:哈希值的正确文本转换方式 嘿,这个问题我之前也碰到过!核心原因是你误解了hashlib.digest()的返回值类型——它输出的是原始二进制哈希字节,这些字节并不是合法的UTF-8编码内容(比如你遇到的0x96字节,在UTF-8规则里属于无效的起始字节),直接用decode("utf-8")解码自然会抛出错误。
正确的两种处理方式:
根据你的使用场景,有两种靠谱的解决方案:
场景1:需要十六进制格式的哈希字符串(最常用)
直接使用hashlib.hexdigest()方法,它会直接返回ASCII编码的十六进制字符串,不需要额外解码:import hashlib m = hashlib.md5() m.update("".encode("utf-8")) # 直接获取十六进制哈希字符串 data_hash = m.hexdigest()场景2:需要Base64编码的哈希字符串(匹配你代码里的需求)
你代码里已经写了正确的Base64转换流程,但最后那行直接解码digest()的操作是多余且错误的。直接用Base64编码后的字符串构建请求头即可:import hashlib import base64 m = hashlib.md5() m.update("".encode("utf-8")) # 正确的Base64编码哈希流程 data_hash = base64.b64encode(m.digest()).decode("utf-8") # 用这个data_hash构建Authorization Header canonical = '%s,application/vnd.api+json,%s,%s,%s' % (action, data_hash, ...)
额外说明:
digest()方法返回的二进制数据仅适合二进制场景(比如直接对比文件哈希的二进制值),如果要用于文本场景(HTTP请求头、日志记录等),必须转换成十六进制或Base64这类安全的文本编码格式,避免出现编码解码错误。
内容的提问来源于stack exchange,提问作者Darth.Vader
相关产品推荐
相关产品推荐

