这段Java代码和C代码之间有什么区别?

这段Java代码和C代码之间有什么区别?,java,c,encryption,xor,Java,C,Encryption,Xor,我试图将一些C代码转换成Java,但它的工作原理略有不同。它是XOR加密,对于某些数据,它返回相同的结果,因此我知道它非常接近,但对于某些数据,它的工作原理并不完全相同(不同的结果) C代码(在x86 Windows上运行,使用Borland Builder编译): void Crypt(无符号字符*数据,长len) { 字符键[]=“X02$B:”; 乌隆地穴; 长x; 对于(crypt_ptr=0,x=0;x=sizeof(key)-1) crypt_ptr=0; } } Java代码(如

我试图将一些C代码转换成Java,但它的工作原理略有不同。它是XOR加密,对于某些数据,它返回相同的结果,因此我知道它非常接近,但对于某些数据,它的工作原理并不完全相同(不同的结果)

C代码(在x86 Windows上运行,使用Borland Builder编译):

void Crypt(无符号字符*数据,长len)
{
字符键[]=“X02$B:”;
乌隆地穴;
长x;
对于(crypt_ptr=0,x=0;x=sizeof(key)-1)
crypt_ptr=0;
}
}
Java代码(如果有必要,可以在Android平台上运行):

publicstaticvoidcrypt(字节[]数据,int偏移量,int len)
{ 
//编辑:将其更改为byte[]而不是char[]似乎有固定的代码
//char[]键={'X'、'0'、'2'、'$'、'B'、':'};
字节[]键={'X'、'0'、'2'、'$'、'B'、':'};
_键的int size_=7;
int crypt_ptr;
int x;
for(crypt_ptr=0,x=0;x=u键的大小\u-1)
crypt_ptr=0;
} 
}

我已经确认进入每个函数的数据是相同的,对于Java版本,我在字节数组中传递正确的偏移量值。如前所述,它有时会起作用,所以我不认为这是一个主要/明显的问题,更像是有符号和无符号值之间的一些次要问题。如果有帮助的话,第一个不同的字节是数据中的字节125(索引124,如果以零为基础)。但是我没有看到模式,就像每125字节一样,在那之后它几乎是随机的。数据只有171个字节,如果需要的话,我可能知道如何作为附件发布,但我不这么认为。

我想这是因为在java中char是16位的。因此,当您增加key
key[crypt\u ptr]+=(char)1
或添加两个char
key[crypt\u ptr]+=key[crypt\u ptr+1]
时,它的作用方式与c不同(其中char是8位)


尝试在任何地方使用字节而不是字符,只是使用符号代码进行初始化。

我想这是因为在java中字符是16位的。因此,当您增加键
key[crypt\u ptr]+=(char)1
或添加两个字符
key[crypt\u ptr]+=key[crypt\u ptr+1]
,它的作用方式与c(其中char为8位)


尝试在任何地方使用字节而不是字符,只使用符号代码进行初始化。

为什么不给我们展示一个差异明显的例子

顺便说一句,我会写:

char[] key = {'X','0','2','$','B',':', '\0'};

你为什么不给我们举个例子,说明这些不同之处

顺便说一句,我会写:

char[] key = {'X','0','2','$','B',':', '\0'};

您的键值必须是8位。试一试

byte[] key = "X02$B:".getBytes();

您的键值必须是8位。试一试

byte[] key = "X02$B:".getBytes();

这是对这个问题的更新吗:?在Java代码中最好声明
int size\u of_key=key.length是的,这是对我另一篇文章的更新。它关闭了,所以我想我需要开始一个新的(并发布一个更好的问题,而不是让别人做我的工作;)?我想我会按照建议更改为size_of_key=key.length,但我会使用+1,因为在C中sizeof()包含空终止符。这是对这个问题的更新吗:?在Java代码中声明
int size_of_key=key.length会更好是的,这是对我另一篇文章的更新。它关闭了,所以我想我需要开始一个新的(并发布一个更好的问题,而不是让别人做我的工作;)?我想我会按照建议更改为size_of_key=key.length,但我会使用+1,因为在C中sizeof()包含空终止符。就是这样,谢谢!在Java中,我将密钥改为byte[]而不是char[],现在它似乎工作正常。我必须用更多的数据来测试它,但我想就是这样了。就是这样,谢谢!在Java中,我将密钥改为byte[]而不是char[],现在它似乎工作正常。我必须用更多的数据来测试它,但我想就是这样。