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

读取文件十六进制字符串触发binascii.Error(奇数长度)问题求助

解决binascii.Error: odd length string问题

这个错误的根源很明确:你提取的message并不是纯十六进制字符串——它还包含了Python字节字面量的标记b'和结尾的',导致字符串总长度变成了奇数(比如你提供的例子里,原十六进制是64个字符,加上b'和'后变成67个字符,奇数长度),而binascii.unhexlify()要求输入必须是偶数长度的纯十六进制字符串。

修正步骤

你只需要在提取字符串后,去掉多余的标记,保留中间的纯十六进制部分即可。有两种简单的方式:

方法1:使用切片截取核心内容

因为b'xxx'格式的字符串,有效内容从索引2开始,到倒数第1个字符结束(最后一个字符是'),所以可以直接切片:

import binascii

u_input = input("请输入文件名: ")
with open(u_input) as fp:
    read_lines = fp.readlines()
    read_message = read_lines[0].split()
    # 去掉b'开头和'结尾的部分
    message = read_message[2][2:-1]
    print("Message: %s"% message)
    uncombine = binascii.unhexlify(message)
    print("decrypt: %s"%uncombine)

方法2:使用strip()移除标记

如果不确定标记的位置(比如偶尔可能有空格),可以用strip()移除两端的b'和':

message = read_message[2].strip("b'")

额外建议

为了避免后续出现其他格式问题,你可以添加一个简单的校验,确保处理后的字符串是偶数长度:

if len(message) % 2 != 0:
    raise ValueError("提取的十六进制字符串长度为奇数,请检查文件内容格式")

这样就能确保输入符合unhexlify()的要求,顺利完成解密操作了。

内容的提问来源于stack exchange,提问作者User1491

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:55:35