Как эмулировать электрический сигнал (эмулятор Enigma) - PullRequest
0 голосов
/ 10 мая 2018

Я хочу эмулировать машину Enigma, поэтому мне нужно эмулировать электрический сигнал.

How enigma works: plugboard and scramblers

Если вы не знакомы с Enigma, вот как это работает: электрический сигнал проходит от платы через скраблеры. Скребки вращаются, поэтому путь сигнала меняется (выходной отличается).

До сих пор я делал это так (это упрощенный код):

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 ++, но давайте просто оставим это сейчас.

Мой вопрос: как я могу оптимизировать код, показанный выше для его цели (если вообще возможно)?

...