c - 字节xor的一些问题

时间:2011-04-11 20:21:56

标签: c xor

我必须在2字节缓冲区上制作一些二进制xor。一个是编码密钥,另一个是编码值。

目前我的代码看起来像这样:

BYTE key[]={"somekey"}
BYTE value[]={"somevalue"};

for(i= 0; i < vallLength; i++)
    {
        valBuf[i] = value[i] ^ key[i % keyLength];
    }

这对我不起作用。我做错了什么?

3 个答案:

答案 0 :(得分:2)

好吧,这很糟糕,但我觉得要为改变编写一些简单的代码。

#include <stdio.h>

char key[] = "This is a fancy key.";
char text[] = "Encrypt this extremely long plaintext.";
#define KEY_LEN (sizeof(key))
#define TXT_LEN (sizeof(text))

void crypt(char *key, char *plaintext, char *ciphertext, int keyLen, int ptLen)
{    
    int idx;
    for (idx = 0; idx < ptLen; idx++)
    {
        ciphertext[idx] = plaintext[idx] ^ key[idx % keyLen];
    }
}

int main()
{
    printf("Plaintext before:\n\t%s\n", text);
    crypt(key, text, text, KEY_LEN, TXT_LEN);
    printf("Plaintext after:\n\t%s\n", text);
    crypt(key, text, text, KEY_LEN, TXT_LEN);
    printf("Plaintext after after:\n\t%s\n", text);
    return 0;
}

这个问题无论如何都注定要关闭,所以在这里发布它不会太麻烦。

答案 1 :(得分:0)

数组的“键”和“值”是否相同?我不确定您要查找的结果,但您可能只想循环较短的长度,然后将较长的数组值填充到^答案。

BYTE* xx = new BYTE[SIZEX];
BYTE* yy = new BYTE[SIZEY];

int nCount = Min(xx.Length(), yy.Length());
BYTE* answer = new BYTE[Max(xx.Length(), yy.Length())];
for(int ii=0; ii<nCount; ++ii)
    answer[ii] = xx[ii] ^ y[ii];

BYTE* zz;
if(xx.Length() > yy.Length())
    zz = xx;
else
    zz = yy;

for(int ii=nCount; ii<Max(xx.Length(), yy.Length()); ++ii)
    answer[ii] = zz[ii];

答案 2 :(得分:-3)

可能是因为“i%keyLength”未定义为首次运行循环,因为i = 0