我想模仿Enigma机器,因此我需要模拟电信号。
如果您不熟悉Enigma,请了解其工作原理:电子信号从插板通过scrabmler传播。 Scrabmlers旋转,因此信号的路径发生变化(输出不同)。
到目前为止,我一直在这样做(这是一个简化的代码):
for (int i = 0; i < data.length; i++)
{
for (int j = 0; j < key.Length; j++)
{
// encrypting
data[i] = scramblers[j][(byte)(data[i] + key[j])];
}
for (int j = 0; j < key.Length; j++)
{
// rotating scramblers
key[j]++;
if (key[j] != 0) break;
}
}
如您所见,我使用输入(未加密)数据作为数组的索引(加扰器连接)。输出(加密数据)是数组(加扰器)的内容。
问题在于,当你连续排队一些扰码器(例如100,000)时,它的速度非常慢。所以我认为必须有一种方法来优化这部分(也许通过指针或链接数组?)。
这段代码目前是用C#编写的,我知道为了获得最佳的优化,它应该被重写为C和C ++,但是现在让它就像这样。
我的问题是:我如何针对其目的(如果可能的话)优化上面显示的代码?