大量字节的位操作

时间:2011-07-09 21:28:29

标签: python encryption bitwise-operators

使用简单的文件加密/解密进行一些练习,目前只是读取一堆字节并一次对每个字节执行适当的位操作,然后将它们写入输出文件。

这种方法似乎很慢。例如,如果我想要将每个字节的XOR异或0xFF,我会遍历每个字节并将XOR循环0xFF,而不是做一些魔术,并且每个字节都快速异或。

是否有更好的方法来执行位操作而不是一次执行一个字节?

2 个答案:

答案 0 :(得分:7)

使用numpy中的bitwise array operations可能是您正在寻找的。

答案 1 :(得分:3)

无论如何,似乎每个字节必须是

  • 从内存中读取,
  • 以某种方式修改,
  • 写回记忆。

你可以通过一次操作多个字节来节省一点时间(没有双关语),例如通过对4或甚至8个字节的整数执行XOR运算,从而划分与循环管理相关的开销,粗略,系数为4或8,但这种改进可能不会对整个算法产生显着的提升。

通过读取表中预先计算的值来替换CPU /语言的“本机”位操作(XOR,移位,旋转等),可以找到其他改进。但请注意,这些原生操作通常都是相当优化的,您必须非常勤奋地在外部设计等效操作,并精确测量这些操作的相对性能。

编辑:糟糕,我刚刚注意到[Python]标记,还有另一个响应中对numpy的引用。
请注意......虽然Numpy按位数组建议似乎是合理的,但这一切都取决于手头问题的实际参数。例如,在排列numpy的按位函数隐含的底层数组时可能会浪费相当多的时间。 请参阅此Stack Overflow question,这似乎非常相关。在专注于XOR操作的同时,这个问题为改进循环等和一般的分析提供了相当多的可操作提示。