c - 随机文本混淆算法失败

标签 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;
}

我怎样才能修正这个算法,使它确实是它自己的逆?有什么提高混淆级别的建议吗?

最佳答案

我在这里看到两个问题:

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

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

关于c - 随机文本混淆算法失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5518192/

相关文章:

python - Cython 中包含一个较大的 C 库

c - 链表和结构

c - 如何屏蔽 32 位整数的最右边的 16 位?

C计算结果难以理解

javascript - 使用转换后的 JS 函数在 Python 中进行反混淆

json - 混淆来自网络服务器的json

java - Proguard 混淆导致 java.lang.IllegalArgumentException : class declares multiple JSON fields named "a"

C语言中使用指针连接字符串

c - 如何从 K&R C 转换为 ANSI C?