MD5是一種迭代算法。你不需要計算大量的小型MD5,然後以某種方式組合它們。您只需閱讀文件的小塊,然後將其添加到摘要中,因此您無需一次將整個文件存儲在內存中。這是一個java實現。
FileInputStream f = new FileInputStream(new File("bigFile.txt"));
MessageDigest digest = MessageDigest.getInstance("md5");
byte[] buffer = new byte[8192];
int len = 0;
while (-1 != (len = f.read(buffer))) {
digest.update(buffer,0,len);
}
byte[] md5hash = digest.digest();
Et瞧。您擁有整個文件的MD5,而無需將整個文件同時存儲在內存中。
值得注意的是,如果由於某種原因,當您需要時,您確實需要文件的子部分的MD5哈希值(這對於在通過低帶寬連接傳輸的大文件上執行臨時檢查有時很有用),那麼您可以在任何時候克隆摘要對象得到他們,像這樣
byte[] interimHash = ((MessageDigest)digest.clone()).digest();
這不會影響實際的摘要對象,所以你可以繼續整體MD5哈希工作。
它也值得注意的是,MD5是一個用於加密目的的過時散列(例如驗證來自不可信源的文件真實性),應該在大多數情況下用SHA-1更好地替換它。對於非加密目的(如驗證兩個可信來源之間的文件完整性),MD5仍然適用。
你爲什麼要這麼做? – AndiDog 2010-02-06 18:49:27
爲了計算太大而不適合內存的文件的MD5值 – channel72 2010-02-06 18:50:05
在計算過程中,MD5僅具有跟蹤512位文件塊的128位狀態;誰在乎這個文件有多大? – 2010-02-06 18:51:33