我正在接收带有校验和的Big Endian格式的字节数组数据。我使用以下代码创建了checkcksum。
public static byte[] createChecksum(byte buffer[], int len){
MessageDigest complete = MessageDigest.getInstance("MD5");
complete.update(buffer,0,len);
return complete.digest();
}
使用数据检查校验和时,它不匹配。我检查了数据。数据没有损坏或错误。我还发现中间只有一个字节在两个校验和之间不匹配。
答案 0 :(得分:0)
您的方法看起来是正确的。
也许你得到一个不受欢迎的结果,因为你得到一个字节数组,你需要稍后转换为HEX?你能写一个关于你正在散列的文件和结果的例子(你得到了什么,你期望)?
您是否检查过输入字节数组是否具有正确的编码并且它应该是什么?请注意尾随行,空格等。
答案 1 :(得分:0)
可能的原因:
然而阅读以下内容
我还发现中间只有一个字节在两个校验和之间不匹配。
让我相信在检查生成的md5(或发送/接收它的那个)的函数中存在错误。 好吧,对于md5类似的哈希函数,这是非常不可能的(只有1个字节的差异),如果它再次发生,它肯定是snd / rcv和/或比较结果代码的错误。
旁注:Big / Little Endian只有在表示占用多个字节的“基元”时才有意义。