首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对C语言中的字符串进行异或运算,然后用同样的函数返回?

如何对C语言中的字符串进行异或运算,然后用同样的函数返回?
EN

Stack Overflow用户
提问于 2012-03-06 03:04:34
回答 2查看 9.1K关注 0票数 3

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

使用相同的函数和输入类型对字符串进行解码。这对于字符串反转没有问题,因为它只是反转回来,但是使用XORing可以很容易地做到这一点而不会变得太复杂吗?我更希望这个过程只保留一个字符串,就像反转那样。这是我的反转函数。

代码语言:javascript
复制
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;
    } 
}

下面是XOR函数的尝试

代码语言:javascript
复制
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;
}


}

有人能帮上忙吗?将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-06 03:11:40

你似乎把事情搞得有点复杂了。试着这样做:

代码语言:javascript
复制
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操作可能会将空字符引入字符串中,因此您确实需要跟踪它的长度,而不是仅仅依赖于尾随的空字符的存在。

还要记住,虽然相对来说,这可能比简单地颠倒字符串要“安全得多”,但任何有足够输出样本的相当聪明的人都可能在大约15分钟左右就能找到如何解码它。

票数 10
EN

Stack Overflow用户

发布于 2019-05-27 01:10:27

这是一个pbox,它需要你做一个不重复的整数key - random -与上述块相同的大小。最后一个块将从偏移量开始,它可能只是随机数据。不包括空的终止符,所以决定数据的去向/你对它做什么。您可以重新分配(buff,"A")来使用memmove。从64位的输出中创建3个64位框和16个4位框的子集,这看起来就像是openssl内置的des的一个糟糕的实现。基本优点是能够使用相同的函数/地址空间进行加密/解密。这也可以让你在没有额外缓冲区的情况下就地加密。KSZ是块/key的长度

代码语言:javascript
复制
char
*zecr
(bff, zbf, ky, ze)
 char *bff;
 char *zbf;
 unsigned int ky[];
 short ze;
{
/* main encrypt decrypt function */

int i=0;
while( i < KSZ ) {
 int dx = ky[i];

 if( ze == 1 ) {            // encrypt
    char c = bff[dx];
    sprintf(zbf + i, "%c", c);

 } else {                   // decrypt
    char c = bff[i];
    char tk[1] = "";
    sprintf(tk, "%c", c);
    memmove(zbf +dx,  tk, 1);
 }

 i++;
}

return zbf;
}

xoring是一种二元运算,它会产生截然不同的结果,这取决于你如何转换它。你得到了使用ocdec的正确想法,但如果你的想法是保持简单,我将假设你实际上并不了解汇编,尽管有请求的引用,坚持使用c调用它更简单,因为你最有可能如何使用数据。

-the女性性高潮,这是个神话。-SUN TZU

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9572364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档