Python中如何对二进制文件读取的bytes字节块做XOR异或运算
Python字节逐字节异或运算实现说明
Python中用于执行按位XOR异或运算的原生运算符为^。
针对读取到的bytes类型字节块,要实现和单字节十六进制值逐字节异或,可参考如下实现逻辑:
- 基础逐字节计算方式
bytes对象迭代时输出的每个元素都是0~255范围的整数,对应单个字节的数值,直接用^和目标异或值运算后,重新转成bytes即可得到结果,示例代码:# block_data为file.read(block_size)读取得到的bytes类型数据 block_data = file.read(block_size) # 定义异或用的单字节值,\x0A对应十六进制0x0A,即十进制10 xor_byte = 0x0A xor_result = bytes(byte_val ^ xor_byte for byte_val in block_data) - 大块数据高效处理方式
如果处理的文件块较大,可提前预生成256位的异或映射表,调用bytes.translate()方法完成计算,执行效率远高于逐字节遍历,示例代码:xor_byte = 0x0A # 预生成所有单字节值和key异或后的映射表 trans_table = bytes(i ^ xor_byte for i in range(256)) xor_result = block_data.translate(trans_table)
注意:如果你的异或值是写为
b'\x0A'格式的单字节bytes对象,不能直接参与^运算,需要先取其整数值:xor_byte = b'\x0A'[0],否则会触发类型不匹配错误。
内容的提问来源于stack exchange,提问作者johnnym
相关产品推荐
相关产品推荐

