使用简单的文件加密/解密进行一些练习,目前只是读取一堆字节并一次对每个字节执行适当的位操作,然后将它们写入输出文件。
这种方法似乎很慢。例如,如果我想要将每个字节的XOR异或0xFF,我会遍历每个字节并将XOR循环0xFF,而不是做一些魔术,并且每个字节都快速异或。
是否有更好的方法来执行位操作而不是一次执行一个字节?
答案 0 :(得分:7)
使用numpy
中的bitwise array operations可能是您正在寻找的。 p>
答案 1 :(得分:3)
无论如何,似乎每个字节必须是
你可以通过一次操作多个字节来节省一点时间(没有双关语),例如通过对4或甚至8个字节的整数执行XOR运算,从而划分与循环管理相关的开销,粗略,系数为4或8,但这种改进可能不会对整个算法产生显着的提升。
通过读取表中预先计算的值来替换CPU /语言的“本机”位操作(XOR,移位,旋转等),可以找到其他改进。但请注意,这些原生操作通常都是相当优化的,您必须非常勤奋地在外部设计等效操作,并精确测量这些操作的相对性能。
编辑:糟糕,我刚刚注意到[Python]
标记,还有另一个响应中对numpy的引用。
请注意......虽然Numpy按位数组建议似乎是合理的,但这一切都取决于手头问题的实际参数。例如,在排列numpy的按位函数隐含的底层数组时可能会浪费相当多的时间。
请参阅此Stack Overflow question,这似乎非常相关。在专注于XOR操作的同时,这个问题为改进循环等和一般的分析提供了相当多的可操作提示。