快速异或算法
Fast XOR Algorithm
有没有办法通过使用一些技巧(不安全代码等)以某种方式提高异或加密算法的速度?
我目前使用的算法如下:
public byte[] XOR(byte[] strng, byte[] key)
{
int string_len = strng.Length;
int key_length = key.Length;
int i, position;
for (i = 0; i < string_len; i++)
{
position = i % key_length;
strng[i] = Convert.ToByte(strng[i] ^ key[position]);
}
return strng;
}
这个功能是否可以改进并以某种方式加快速度?
当且仅当两个数组对齐相同时,使用 64 位 XOR 而不是 8 位 XOR 可以更快。
即使没有对齐,展开循环也会减少循环终止条件和分支的开销。
并且绝对摆脱 %
运算符。由于一次只能向前移动一个元素,因此可以通过一次减法实现回绕。
通常情况下,优化编译器应该为您做这些事情,但 JIT 在优化方面可能不像成熟的 C++ 优化器那样聪明。
有没有办法通过使用一些技巧(不安全代码等)以某种方式提高异或加密算法的速度?
我目前使用的算法如下:
public byte[] XOR(byte[] strng, byte[] key)
{
int string_len = strng.Length;
int key_length = key.Length;
int i, position;
for (i = 0; i < string_len; i++)
{
position = i % key_length;
strng[i] = Convert.ToByte(strng[i] ^ key[position]);
}
return strng;
}
这个功能是否可以改进并以某种方式加快速度?
当且仅当两个数组对齐相同时,使用 64 位 XOR 而不是 8 位 XOR 可以更快。
即使没有对齐,展开循环也会减少循环终止条件和分支的开销。
并且绝对摆脱 %
运算符。由于一次只能向前移动一个元素,因此可以通过一次减法实现回绕。
通常情况下,优化编译器应该为您做这些事情,但 JIT 在优化方面可能不像成熟的 C++ 优化器那样聪明。