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

Python实现二进制文件XOR的OTP密码代码调试与在线运行咨询

问题背景

你在安卓端开发OTP实现的二进制文件XOR运算引擎,规则为按两个文件中较短的长度做截断运算,因常用在线编译器不支持文件操作无法自测,需要代码校验及可测试方案。

原代码存在的问题

你的代码目前无法正常运行,存在以下几个核心错误:

  • 核心运算逻辑错误:代码中使用的是|(按位或)运算符,并非OTP要求的^(异或/XOR)运算,不符合功能需求。
  • 语法报错点:s.split("")为非法写法,Python不支持传入空字符串作为split方法的分隔符,运行到该行会直接抛出ValueError异常中断。
  • 结果写入逻辑错误:将二进制字符串(如"0b01100001")直接传入bytearray()的写法,会把字符串的每个字符('0'、'b'、'0'、'1'...)转为对应ASCII值的字节,最终写入的文件完全不是预期的单字节XOR结果,内容完全错误。
  • 冗余逻辑:生成output2.ttt的代码仅实现了key文件前min_size字节的复制,和XOR核心功能无关,可根据需求决定是否保留。
  • 性能缺陷:逐字节读取文件、将字节转为二进制字符串逐位运算的写法效率极低,处理稍大的文件时会出现明显卡顿。
修正后可正常运行的代码
import os

PLAINTEXT_FILE = "file.ttt"
KEY_FILE = "key.ttt"
CIPHER_FILE = "output1.ttt"
KEY_COPY_FILE = "output2.ttt"

# 前置校验输入文件
if not os.path.exists(PLAINTEXT_FILE) or not os.path.exists(KEY_FILE):
    print("运行错误:请确保file.ttt、key.ttt与脚本处于同一目录")
    exit(1)

min_size = min(os.path.getsize(PLAINTEXT_FILE), os.path.getsize(KEY_FILE))

# 用上下文管理器自动处理文件关闭,避免资源泄漏
with open(PLAINTEXT_FILE, "rb") as f1, open(KEY_FILE, "rb") as f2, open(CIPHER_FILE, "wb") as f_out:
    # 直接读取对应长度字节,逐字节异或,无需转字符串,逻辑简洁效率高
    plain_data = f1.read(min_size)
    key_data = f2.read(min_size)
    xor_res = bytes(b1 ^ b2 for b1, b2 in zip(plain_data, key_data))
    f_out.write(xor_res)

# 若不需要复制key文件可删除以下代码段
with open(KEY_FILE, "rb") as f_key, open(KEY_COPY_FILE, "wb") as f_copy:
    f_copy.write(f_key.read(min_size))

print(f"运算完成,已生成{CIPHER_FILE}与{KEY_COPY_FILE},运算长度为{min_size}字节")
测试方案
  • 在线测试可选择带虚拟文件系统功能的在线Python运行环境,这类环境一般提供可视化的文件上传、下载面板,运行脚本前先在文件区上传你准备好的file.ttt和key.ttt测试文件,脚本运行完成后直接下载生成的输出文件校验即可。
  • 安卓本地测试更推荐直接安装本地Python运行环境类APP,授予存储权限后将脚本和测试文件放在同一目录下即可本地运行,不需要依赖网络,也没有在线环境的文件大小限制。
正确性校验方法

XOR运算满足可逆性:将生成的output1.ttt作为第一个输入文件,原key.ttt作为第二个输入文件重新运行脚本,得到的输出如果和原file.ttt的前min_size字节内容完全一致,就说明XOR引擎逻辑正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.17 16:16:01