Python实现EXE文件base64编解码及解码后文件不可用问题求助
问题根因
- 编码脚本逻辑错误:循环读取exe分片时,每次都以
wb(覆盖写)模式打开输出的base64文本文件,若原exe大小超过你设定的75232000字节分片阈值,最终输出的txt里只会保留最后一片的编码结果,前面的所有内容都被覆盖丢失,编码结果本身就是不完整的。 - 解码脚本逻辑完全错误:
- 硬编码解码源为字符串
"string",根本没有读取编码生成的testoutput.txt文件内容,解码的源数据和你编码的结果毫无关联。 - 输出exe时使用
w文本模式写入,还将解码得到的二进制字节强行转为字符串写入,文本模式会自动修改换行符等特殊字节,bytes转str的过程也会因编码不匹配丢失大量二进制信息,直接破坏了exe的可执行结构。
- 硬编码解码源为字符串
修复后的实现代码
编码脚本
import base64 # 用with语句自动管理文件句柄,避免资源泄漏 with open("test.exe", 'rb') as fr, open('testoutput.txt', 'wb') as fw: while True: piece = fr.read(75232000) if not piece: break fw.write(base64.b64encode(piece))
解码脚本
import base64 # 先读取编码后的文本内容 with open("testoutput.txt", "rb") as f: encoded_content = f.read() # 解码后直接以二进制模式写入exe文件 decoded_bytes = base64.b64decode(encoded_content) with open("testoutput1.exe", "wb") as exe: exe.write(decoded_bytes)
额外注意
如果你的exe文件本身很大,base64编码后体积会膨胀1/3,要确保磁盘空间足够。编码解码完成后可以对比原exe和解码后exe的MD5/SHA哈希值,确认文件完全一致。
内容的提问来源于stack exchange,提问作者user16838936
相关产品推荐
相关产品推荐

