如何将Python RSA加密生成的字节保存到TXT并后续正确读取
问题解决方案
错误原因
你直接调用str(字节对象)得到的是字节的字面量表示文本,本质是类似"b'Y\\xf8\\xbc......'"的普通字符串,不是字节解码后的有效内容。直接调用bytes()时要求字符串参数必须传入编码规则,就算传入编码转换后得到的也不是你原始的加密字节,所以既报错也达不到需求。
两种可落地的实现方案
方案1:用Base64编码转换(最推荐,通用兼容)
加密后字节转Base64纯文本存储,读取时反向解码即可得到原始字节,无编码兼容问题:
- 写入TXT时的代码示例:
import base64 # 假设enc_bytes是你加密得到的原始字节串 enc_bytes = b'Y\xf8\xbc\xca\x14\x0f\x80\xd3\xc6\xce\xecE\x14\xc1\xaf\xbd\x82\xd24\xcf\x04\xe2\x9a\x81NF\xbeXi\x85\xef\xc4\xbbl\xd3(5\x80\xe4\xde3\x8eC\xd2jR*\xb7.gq\x8c\x8b\xa12\x1a\x10+\xbf\xefHZ\n/' # 转Base64字符串 save_str = base64.b64encode(enc_bytes).decode('ascii') # 直接写入TXT即可 with open("enc.txt", "w", encoding="utf-8") as f: f.write(save_str)
- 读取TXT还原原始字节的代码示例:
import base64 with open("enc.txt", "r", encoding="utf-8") as f: read_str = f.read() # 反向解码得到原始加密字节 original_enc_bytes = base64.b64decode(read_str)
方案2:直接解析已存储的字面值字符串
如果你已经用str()把字节转成字面量字符串存到TXT里了,可以用ast.literal_eval安全解析转换:
import ast with open("enc.txt", "r", encoding="utf-8") as f: read_str = f.read() # 直接把字面量字符串转成原始字节对象 original_enc_bytes = ast.literal_eval(read_str)
注意不要用eval()做解析,ast.literal_eval只会解析Python基础类型字面量,不会执行恶意代码,安全性更高。
内容的提问来源于stack exchange,提问作者Mikecraft1224
相关产品推荐
相关产品推荐

