我一直在試驗一個簡單的基於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;
}
我怎樣才能解決這個算法,它確實是其本身的逆?任何提高混淆程度的建議?
我沒有深入到算法中,而是'p = i ++;'使'p = 0'變成了兩次。這是預期的行爲嗎? – khachik 2011-04-01 20:01:42
@thkala我運行了你的代碼,它對我來說非常合適。也許別人可以複製這個問題? – Kromey 2011-04-01 20:14:30
@Kromey:它呢?太好了! +1 – thkala 2011-04-01 20:24:46