java中的MD5校验和问题

时间:2011-01-05 08:16:09

标签: java md5

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

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

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

2 个答案:

答案 0 :(得分:0)

您的方法看起来是正确的。

也许你得到一个不受欢迎的结果,因为你得到一个字节数组,你需要稍后转换为HEX?你能写一个关于你正在散列的文件和结果的例子(你得到了什么,你期望)?

您是否检查过输入字节数组是否具有正确的编码并且它应该是什么?请注意尾随行,空格等。

答案 1 :(得分:0)

可能的原因:

  • 您没有将整个内容读入缓冲区
  • 您提供了错误的'len'参数

然而阅读以下内容

  
    

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

  

让我相信在检查生成的md5(或发送/接收它的那个)的函数中存在错误。 好吧,对于md5类似的哈希函数,这是非常不可能的(只有1个字节的差异),如果它再次发生,它肯定是snd / rcv和/或比较结果代码的错误。

旁注:Big / Little Endian只有在表示占用多个字节的“基元”时才有意义。