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

如何通过Python将用户输入文件加密为随机ASCII密钥?

问题与解决方案

现存问题

  • 无法通过用户输入的文件路径正确读取文件内容
  • 已生成随机ASCII映射密钥,但不知道如何利用该密钥完成文件加密

原代码核心问题

  • 密钥生成逻辑错误:if candidate not in numbersran: 未缩进在while循环内部,导致永远无法向numbersran添加元素,最终生成空字典
  • 文件读取重复无效:既用open(filename)读取文件,又用固定字符串路径重复执行with open,且后者未使用用户输入路径
  • 加密逻辑缺失:仅完成字符转ASCII值的步骤,未实现密钥映射加密的核心操作

修正后的完整代码

import random

# 生成1-127 ASCII字符的随机映射密钥(可打印ASCII范围)
lst = list(range(1, 128))
numbersran = []
while len(numbersran) < 127:
    candidate = random.randint(1, 127)
    if candidate not in numbersran:
        numbersran.append(candidate)

# 构建加密映射:原ASCII值 → 随机替换的ASCII值
encrypt_dict = dict(zip(lst, numbersran))
# 生成解密字典(可选,用于后续还原文件)
decrypt_dict = {v: k for k, v in encrypt_dict.items()}

print("加密密钥(原ASCII: 替换后ASCII)=", encrypt_dict)
print()

# 读取用户输入的文件
filename = input("输入文件路径: ")
try:
    with open(filename, 'r', encoding='utf-8') as f:
        file_content = f.read()
except FileNotFoundError:
    print(f"错误:找不到文件 {filename}")
    exit()

# 执行加密操作
encrypted_content = []
for char in file_content:
    original_ascii = ord(char)
    # 仅处理可打印ASCII字符,其他字符保持原样
    if 1 <= original_ascii <= 127:
        encrypted_ascii = encrypt_dict[original_ascii]
        encrypted_content.append(chr(encrypted_ascii))
    else:
        encrypted_content.append(char)

# 保存加密后的文件(避免覆盖原文件)
output_filename = f"encrypted_{filename}"
with open(output_filename, 'w', encoding='utf-8') as f:
    f.write(''.join(encrypted_content))

print(f"加密完成,已保存到文件: {output_filename}")

关键改动说明

  • 修复密钥生成:将if语句缩进至while循环内部,确保生成1-127的随机全排列映射
  • 统一文件读取:用with open结合用户输入路径读取文件,添加异常处理避免文件不存在报错
  • 实现加密逻辑:遍历文件每个字符,通过密钥字典将原ASCII值替换为随机生成的对应值,再转回字符
  • 优化文件保存:生成带前缀的输出文件名,避免覆盖原文件
  • 指定编码格式:打开文件时指定encoding='utf-8',兼容中文等非ASCII字符的读写

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:30:28