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

基于ASCII的文件解密异常:解密时陷入循环致文件无限膨胀

解密时无限循环、文件持续膨胀的问题排查与修复

从你贴的加密代码来看,加密逻辑是没问题的——读取整个文件内容,对每个字符的ASCII值加上偏移量后写入新文件。但解密时出现文件越变越大、程序卡死的情况,几乎可以肯定是你的解密代码犯了以下几个常见错误之一:

最可能的元凶:输入输出文件混淆+错误循环

如果你的解密代码不小心把要读取的加密文件和要写入的解密文件设成了同一个,或者在循环中错误地操作文件对象而非文件内容,就会导致程序陷入无限写入的循环:

  • 举个典型的错误示例:

    # 错误!输入输出文件都是new_msg.txt,写入时会不断追加内容,读取的是不断变长的文件
    encrypted_file = open('new_msg.txt', 'r')
    decrypted_file = open('new_msg.txt', 'a')
    for line in encrypted_file:
        for char in line:
            decrypted_file.write(chr(ord(char) - input_offset))
    

    这种情况下,程序一边读取文件的内容,一边往同一个文件里写新内容,文件会持续膨胀,永远读不完,自然陷入循环。

  • 另一种可能是用了while True这类无终止条件的循环,又没有正确的break逻辑,导致一直在写入重复内容。

正确的解密代码实现

参照你的加密逻辑,解密只需要把每个字符的ASCII值减去偏移量,同时严格区分输入输出文件,用和加密一致的方式读取整个文件内容:

if choice == 4:  # 假设这是你的解密选项
    file_to_decrypt = input("Please enter name of file to decrypt: ")
    offset = int(input("Please enter offset value (1 to 96): "))
    decrypted_content = ""
    
    # 用with语句自动管理文件,避免资源泄漏
    with open(file_to_decrypt, 'r') as enc_file, open('decrypted_message.txt', 'w') as dec_file:
        # 读取整个加密文件的内容
        enc_content = enc_file.read()
        # 遍历每个字符,执行解密操作
        for char in enc_content:
            original_ascii = ord(char)
            decrypted_char = chr(original_ascii - offset)
            decrypted_content += decrypted_char
        # 写入解密后的内容
        dec_file.write(decrypted_content)
    
    print("解密完成!请查看decrypted_message.txt")

关键注意事项

  • 绝对不要让输入输出文件同名:这是导致文件无限膨胀的核心原因,必须严格分开。
  • 始终用with语句操作文件:它会自动帮你关闭文件,避免因文件未关闭导致的指针异常或资源泄漏。
  • 验证偏移量范围:确保解密时ord(char) - offset落在可打印ASCII字符范围内(和加密时的1-96对应),避免出现乱码或不可见字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:58:50