我必须在2字节缓冲区上制作一些二进制xor。一个是编码密钥,另一个是编码值。
目前我的代码看起来像这样:
BYTE key[]={"somekey"}
BYTE value[]={"somevalue"};
for(i= 0; i < vallLength; i++)
{
valBuf[i] = value[i] ^ key[i % keyLength];
}
这对我不起作用。我做错了什么?
答案 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