Ошибка алгоритма обфускации случайного текста

Я экспериментировал с простым алгоритмом обфускации текста на основе XOR. Предположительно, когда алгоритм запускается дважды подряд, я должен вернуть исходный ввод, но в моей реализации это случается только иногда. Вот мой код со случайным текстом для демонстрации проблемы:

#include <stdio.h>

void obfuscate(char *text) {
        char i = 0, p = 0;

        while (text[i] != 0) {
                text[i] = (text[i] ^ (char)0x41 ^ p) + 0xfe;

                p = i++;
        }
}


int main(int argc, char **argv) {
    char text[] = "Letpy,Mprm` Nssl'w$:0==!";

    printf("%s\n", text);

    obfuscate(text);

    printf("%s\n", text);

    obfuscate(text);

    printf("%s\n", text);

    return 0;
}

Как я могу исправить этот алгоритм, чтобы он действительно был обратным? Есть ли предложения по улучшению уровня обфускации?

8
задан iCodez 1 April 2015 в 02:56
поделиться