随机文本混淆算法失败

thk*_*ala 8 c obfuscation

我一直在尝试一种简单的基于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;
}
Run Code Online (Sandbox Code Playgroud)

我该如何修复这个算法,以确保它自己的反转?有什么建议可以提高混淆程度吗?

int*_*jay 6

我在这里看到两个问题:

  1. 操作+ 0xfe不是它自己的逆.如果删除它并仅保留XOR,则每个字节将按预期还原为其原始值.

  2. 一个更微妙的问题:加密文本可能会创建一个零字节,这将截断文本,因为您使用以null结尾的字符串.最好的解决方案可能是单独存储文本长度而不是空终止加密文本.