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

如何修改XOR加密Python脚本 将加密结果存为内存对象而非本地文件

XOR加密脚本内存存储修改方案

针对原脚本的改造只需调整输出逻辑,不需要改动核心异或加密流程,具体改动点如下:

  • 移除原脚本中输出文件路径输入、本地文件写入的相关逻辑,不再落地加密结果到磁盘
  • 用可变字节数组bytearray作为内存缓冲区,逐字节收集异或计算后的加密结果,替代原有的文件写入操作
  • 不要尝试直接把原始加密二进制用UTF-8/GBK等编码转字符串:加密后的字节包含大量不可打印、不符合文本编码规则的值,直接转码会抛出异常。通用方案是用Base64编码把二进制结果转为合法可传输的字符串类型
  • 把完整逻辑封装为自定义函数,最终返回字符串类型的加密结果

补充说明:XOR是对称加密算法,后续需要解密时,只要把Base64字符串解码回原始二进制字节,用相同密钥再做一次异或运算即可还原源文件。

修改后的可直接运行代码如下:

from hashlib import sha256
import base64

def xor_encrypt_to_mem_str(input_file_path: str, encrypt_key: str) -> str:
    # 基于输入密钥生成SHA256定长密钥流
    key_stream = sha256(encrypt_key.encode('utf-8')).digest()
    # 初始化内存字节缓冲区,替代原本地输出文件
    encrypted_bytes = bytearray()
    
    with open(input_file_path, 'rb') as f_in:
        index = 0
        while f_in.peek():
            current_byte = ord(f_in.read(1))
            key_pos = index % len(key_stream)
            # 逐字节异或计算
            encrypted_byte = current_byte ^ key_stream[key_pos]
            encrypted_bytes.append(encrypted_byte)
            index += 1
    
    # 二进制结果转Base64字符串返回
    return base64.b64encode(bytes(encrypted_bytes)).decode('ascii')

# 调用示例
if __name__ == "__main__":
    file_path = input("put file name : ")
    key = input("put the key: ")
    # 得到的result就是保存在内存中的字符串类型加密结果,可直接传递给后续业务逻辑
    result = xor_encrypt_to_mem_str(file_path, key)
    print(f"加密完成,字符串结果长度:{len(result)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:21:17