如何快速解码(移位和异或)海量字节数组?
我需要一个文件查看器应用程序来打开存档文件并解码其中的文件并将它们显示给用户。这些文件使用字节移位和异或系统加密。我不可能改变算法。目前,我只是读取所有字节,然后对它们运行解码功能。
我目前使用的解码功能:
byte[] DecodeVOQ(byte[] EncodedBytes)
{
for (int i = 0; i < EncodedBytes.Length; i++)
{
EncodedBytes[i] ^= (byte)194;
EncodedBytes[i] = (byte)((EncodedBytes[i] << 4) | (EncodedBytes[i] >> 4));
}
return EncodedBytes;
}
编辑:我发现真正的性能问题是显示文本。阅读+解码非常快。
最佳答案
一种可能的优化是预先计算任何输入字节的输出。所以你会有:
private static byte[] DecodedBytes = PrecomputeDecodedBytes();
public static byte[] DecodeVOQ(byte[] data)
{
for (int i = 0; i < data.Length; i++)
{
data[i] = DecodedBytes[data[i]];
}
return data;
}
不过,这很可能会比您现有的位移算法慢。编辑:我刚刚尝试将其与原始位移进行比较,但使用临时局部变量:它们大致相同。
您是否对当前性能进行了基准测试?是不是太慢了?特别是,从几乎任何存储介质加载文件将比解码成本慢得多。我刚刚在我的笔记本电脑上试过这个——对于 200MB 的数据,大约需要半秒钟。 (编辑:用马塞洛的回答,不到半秒。)这真的太慢了吗?
您愿意使用多个处理器吗?毕竟,这是一个令人尴尬的可并行化例程。如果您使用的是 .NET 4,那么 TPL 可能会使这变得非常简单。
我应该再次强调,这不是“加密”——它是一种温和的混淆形式,就像基本 HTTP 身份验证的用户名/密码的 base-64 编码一样。
关于c# - 如何快速解码(移位和异或)海量字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4389565/