在XOR字节数组时,我遇到了一些不太令人满意的性能。
并不是说它非常糟糕,但我想知道是否有某种方法可以获得更好的表现。
我在考虑为每个xor使用更多的cpu注册表。但我不知道如何去做这件事。
这是我的职责,负责XOR'ing。
internal void TransformBlock(byte[] inputBuffer, long inputOffset, int inputCount,byte[] outputBuffer, int outputOffset, byte[] counter, int counterOffset, byte[] key)
{
using (var encryptor = Aes.CreateEncryptor(key, zeroIV))
{
int offs = 0;
int blocks = inputCount + counterOffset > 16 ? ((inputCount + counterOffset + 16 - 1) / 16) : 1;
var counterBuffer = new byte[16 * blocks];
for (int i = 0; i < blocks; i++)
{
for (int j = 0; j < counter.Length; j++)
{
counterBuffer[offs++] = counter[j];
}
// Increment counter by one
for (var k = counter.Length - 1; k >= 0; k--)
{
if (++counter[k] != 0)
break;
}
}
var keyBytesBuffer = encryptor.TransformFinalBlock(counterBuffer, 0, counterBuffer.Length);
for (var i = 0; i < inputCount; i++)
{
outputBuffer[outputOffset + i] = (byte)(inputBuffer[inputOffset + i] ^ keyBytesBuffer[i + counterOffset]);
}
}
}