Python使用ECC加密写入含换行文本到文件的问题求解
ECC加密保留换行格式的正确实现
你的加密写入逻辑本身没有问题,换行符不生效是解密后的输出处理错误导致的,和加密、文件写入环节无关。
问题根因
你解密后直接打印的是bytes类型的原始字节对象,Python打印字节对象时默认输出其调试表示形式,会把\n这类控制符以转义字符的形式展示,不会实际解析为换行操作。实际上\n换行符从明文传入加密、写入文件、读取解密的全流程都没有被篡改或丢失。
你可以用这段代码验证字节完整性:
original_content = b"Hi!\nI want to put a new line here." decrypted_raw = decrypt(secretKey, encrypt(publicKey, original_content)) print(decrypted_raw == original_content) # 运行后会输出True,证明字节完全一致
正确操作步骤
- 密文文件读写全程使用二进制模式:你当前用
wb写、rb读密文的写法是完全正确的,不要改用文本模式读写密文,否则编码转换会破坏密文结构导致解密失败。 - 解密后先做编码转换再输出/使用:拿到解密返回的字节串后,按明文对应的编码(通常用utf-8)解码为普通字符串,此时换行符会被正常解析。
修正后的解密代码如下:
with open(pathToFile, 'rb') as fp: fileText = fp.read() # 解密后解码为字符串 decrypted_text = decrypt(secretKey, fileText).decode('utf-8') # 打印时会正常显示换行 print(decrypted_text)
运行后输出效果为:
Hi! I want to put a new line here.
额外注意点
如果你的明文是从文本文件读取的,读取时同样建议用二进制模式读取后直接传入加密函数,避免文本模式自动转换换行符(比如Windows平台默认会把\n转成\r\n)导致和预期格式不一致。
内容的提问来源于stack exchange,提问作者Zsombor Bóna
相关产品推荐
相关产品推荐

