我一直在试验一种简单的基于 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;
}
我怎样才能修正这个算法,使它确实是它自己的逆?有什么提高混淆级别的建议吗?
最佳答案
我在这里看到两个问题:
操作
+ 0xfe
不是它自己的逆运算。如果将其删除并仅保留 XOR,则每个字节都将按预期恢复为原始值。一个更微妙的问题:加密文本可能会产生一个零字节,这将截断文本,因为您使用了以 null 结尾的字符串。最好的解决方案可能是单独存储文本长度,而不是用 null 终止加密文本。
关于c - 随机文本混淆算法失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5518192/