如何异或在C中加扰字符串并使用相同的函数再次返回?

我试图在程序中混淆一个字符串。 目前,我只有一个简单的字符串反转工作。 我希望能够对数据执行XOR加扰以使其更安全,但是我尝试过的方法不起作用。

相同的函数和输入类型用于解码字符串。 这对于字符串反转没有问题,因为它只是反转,但是这可以通过XORing轻松完成而不会过于复杂吗? 我希望如果进程只保留一个字符串,就像反转一样。 这是我的逆转function。

void reverse_string(unsigned char *buf, int length) { int i; unsigned char temp; for (i = 0; i < length / 2; i++) { temp = buf[i]; buf[i] = buf[length - i - 1]; buf[length - i - 1] = temp; } } 

这是XORfunction的尝试

 void charxor(char * text, int len) { const unsigned char enc[8]={173,135,131,121,110,119,187,143}; char ch; int i; int ind=0; for (i=0;i<len;i++) { ch=*text++; if (ch) *text = ch ^ enc[ind++]; ind %=8; } } 

有人可以帮忙吗? 非常感谢!

你好像有点过分复杂了。 试试这个:

 void charxor (unsigned char *text, int len) { const unsigned char enc[8] = {173,135,131,121,110,119,187,143}; int i; for (i = 0; i < len; i++) { text[i] ^= enc[i % 8]; } } 

请注意,XOR操作可以在字符串中引入空字符,因此您确实需要跟踪其长度,而不是仅仅依赖于尾随空字符的存在。

还要记住,虽然这可能确实相对来说“比安全”更“安全”,但任何能够访问足够的输出样本的聪明人都可以在大约十五分钟左右的时间内弄清楚如何解码它。 。