如何模拟电信号(Enigma仿真器)

时间:2018-05-10 10:04:00

标签: c# encryption emulation

我想模仿Enigma机器,因此我需要模拟电信号。

How enigma works: plugboard and scramblers

如果您不熟悉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 ++,但是现在让它就像这样。

我的问题是:我如何针对其目的(如果可能的话)优化上面显示的代码?

0 个答案:

没有答案