Python文件加解密问题:如何实现E选项加密的逆向解密?
文件加解密代码修复方案
原代码核心问题
- 加密逻辑冗余错误:原加密代码在
for循环内部每次都将当前加密结果转成二进制写入文件,导致文件被多次覆盖,最终得到的是错误的加密结果。 - 解密逻辑完全偏离逆向流程:原解密代码直接对二进制字符串的单个字符(
'0'/'1')执行ord(i)+3操作,完全不符合加密的逆向步骤。加密流程是「明文→ASCII减3→转8位二进制→拼接写入」,解密必须逆向执行「读取二进制串→按8位拆分→转十进制→转字符→ASCII加3→明文」。
修复后的完整代码
def read_file_content(file_path): with open(file_path, 'r') as f: return f.read().strip() def write_file_content(file_path, content): with open(file_path, 'w') as f: f.write(content) Selection = input('请选择操作:输入E加密文件,输入D解密文件\n') if Selection == "E": # 读取原始明文 JediMessage = read_file_content('HolocronMessage.txt') JediEncrypted = "" # 对每个字符执行ASCII减3加密 for i in JediMessage: JediEncrypted += chr(ord(i) - 3) # 将加密后的字符统一转成8位二进制字符串并拼接 binary_encrypted = ''.join(format(ord(c), '08b') for c in JediEncrypted) # 写入加密结果 write_file_content('HolocronMessage.txt', binary_encrypted) print("加密完成,文件内容已更新为二进制加密串") elif Selection == "D": # 读取二进制加密串 binary_encrypted = read_file_content('HolocronMessage.txt') # 校验加密文件格式合法性 if len(binary_encrypted) % 8 != 0: print("错误:加密文件格式无效,长度不是8的倍数") else: JediDecrypted = "" # 按每8位一组拆分二进制串,逆向还原 for i in range(0, len(binary_encrypted), 8): # 8位二进制转十进制,再转成加密时的字符 encrypted_char = chr(int(binary_encrypted[i:i+8], 2)) # ASCII加3还原原始字符 JediDecrypted += chr(ord(encrypted_char) + 3) # 写入还原后的明文 write_file_content('HolocronMessage.txt', JediDecrypted) print("解密完成,文件已还原为原始内容") else: print("无效选择,请输入E或D")
关键修复说明
- 新增
read_file_content和write_file_content函数,统一处理文件读写,避免资源泄漏和重复代码。 - 加密流程优化:先完整处理所有字符得到加密字符串,再统一转换为二进制串写入文件,解决循环内重复写入的问题。
- 解密流程修正:
- 先校验二进制串长度(必须是8的倍数,保证每个字符对应完整的8位二进制)。
- 按8位拆分二进制串,将每组转换为十进制整数,还原出加密时的字符。
- 对每个加密字符执行ASCII加3操作,还原原始明文后写入文件。
内容的提问来源于stack exchange,提问作者Cloud
相关产品推荐
相关产品推荐

