2011-01-05 141 views
1

我正在用Big Endian格式接收來自校驗和的字節數組數據。我使用下面的代碼創建了checkcksum。MD5中的MD5校驗和問題

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

使用數據檢查校驗和時,它不匹配。我檢查了數據。數據沒有被破壞或錯誤。我還發現中間只有一個字節在兩個校驗和之間不匹配。

+0

你比較md5校驗和是什麼? – 2011-01-05 08:19:16

+0

校驗和隨數據提供。 – Kamahire 2011-01-05 08:21:07

+2

我懷疑校驗和計算方式不完全一樣。 BTW:字節總是字節,沒有字節序。是否有可能錯誤地讀取校驗和? – 2011-01-05 08:21:19

回答

0

您的方法看起來正確。

也許你會得到一個不希望的結果,因爲你得到一個字節數組,你需要稍後轉換成HEX?你能寫一個你正在做什麼文件哈希和結果(你得到和你期望)的例子嗎?

你是否檢查過輸入字節數組是否具有正確的編碼方式,而且它應該是什麼?注意尾隨的線條,空格等等。

0

可能的原因:

  • 你沒看過的全部內容爲您提供錯誤的 'LEN' 參數
  • 緩衝

但是閱讀以下

我還發現中間只有一個字節不匹配兩個校驗和。

使我相信有錯誤的功能檢查所得的MD5(或發送/接收它的人)。 那麼,對於md5相同的散列函數,這是非常不可能的(只有1個字節的差異),如果它重新發生,它肯定是一個錯誤到snd/rcv和/或比較結果代碼。

備註:Big/Little Endian只有在表示需要多於一個字節的「原語」時纔有意義。

+0

我檢查了我提供的len。我也用我提供的數據陣列來創建校驗和。 – Kamahire 2011-01-05 15:48:28

+0

檢查(snd/rcv)md5的代碼怎麼樣? – bestsss 2011-01-05 16:48:50

+0

我已經手動檢查,因爲數據大小隻有42個字節。 – Kamahire 2011-01-05 21:16:12