java中的MD5校验和问题

java中的MD5校验和问题,java,md5,Java,Md5,我正在以带校验和的Big-Endian格式从接收字节数组数据。我使用以下代码创建了校验和 public static byte[] createChecksum(byte buffer[], int len){ MessageDigest complete = MessageDigest.getInstance("MD5"); complete.update(buffer,0,len); return complete.digest(); } 在使用数据检查校验

我正在以带校验和的Big-Endian格式从接收字节数组数据。我使用以下代码创建了校验和

public static byte[] createChecksum(byte buffer[], int len){ 
     MessageDigest complete = MessageDigest.getInstance("MD5");
     complete.update(buffer,0,len);
     return complete.digest();
}

在使用数据检查校验和时,校验和不匹配。我查过数据了。数据没有损坏或错误。我还发现中间只有一个字节在两个校验和之间不匹配。

您的方法看起来是正确的

也许你得到了一个不想要的结果,因为你得到了一个字节数组,你以后需要转换成十六进制?你能写一个你正在散列的文件和结果的例子吗

您是否检查了输入字节数组的编码是否正确,以及它是否正确?注意尾随线、空格等。

可能的原因:

  • 您没有将整个内容读入缓冲区
  • 您提供了错误的“len”参数
然而,阅读以下内容

我还发现中间只有一个字节在两个校验和之间不匹配

使我相信检查结果md5(或发送/接收md5的md5)的函数中存在错误。 好吧,对于类似md5的hashFunction来说,这是非常不可能的(只有1个字节的差异),如果它再次出现,那么它肯定会错误地进入snd/rcv和/或比较结果代码


旁注:只有在表示占用超过一个字节的“原语”时,大/小尾端才有意义。

与md5校验和比较的是什么?校验和随数据而来。我怀疑校验和的计算方式不完全相同。顺便说一句:字节总是字节,没有尾数。是否可能您读取的校验和不正确?md5sum通常以十六进制格式提供。我希望看到读入或打印该字符串的代码。如果某个地方存在一个错误或类似的错误,则不太可能只获得一个具有一个字节差的md5sum。您确定要将哈希本身排除在校验和计算之外吗?我已与我提供的len进行了检查。我还检查了我提供的数据数组以创建校验和。我得到的校验和是3fce3c93fd03f43f783efee11b6e37b生成的校验和是3FCE3C93FD09D43F783EFEE11B6E37B您可以发布接收数据的代码吗;生成如此相似的哈希结果是不可能的。此外,如果可以添加数据本身,则会导致这些结果