如何修改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
相关产品推荐
相关产品推荐

