You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:39:15