我有我的應用程序的一部分存儲文件。因爲我們可能會添加許多相同的文件,所以我首先保留每個文件的散列。如果兩個文件具有相同的散列,那麼我們就丟棄一個,並且對這個文件的「引用」都指向相同的物理文件。我應該如何處理應用程序中的校驗和衝突?
我應該爲散列碰撞擔心多少?
在發生碰撞的情況下,我該怎麼辦?到目前爲止,我的代碼的整個關鍵取決於沒有兩個不同的文件具有相同的散列。在現在發生衝突的情況下,我的應用程序會拋出一個合法的不同文件,並使用相同的散列指向該文件。
我應該使用MD5以外的東西嗎? SHA-1有更好的衝突率嗎?
校驗和!= hash – jldupont 2009-12-14 21:15:44
@jldupont,校驗和通常不是從哈希函數派生的?你能解釋一下這個區別嗎? – KingNestor 2009-12-14 21:26:46
@KingNestor:通常情況下,散列的設計是爲了儘量減少整個域的衝突(以便它可以用於散列表或其他)。校驗和僅用於最小化輸入之間的碰撞,對於這些碰撞,轉錄錯誤(或類似)很可能會將其中一個轉換爲另一個。當然,如果您使用安全的單向函數,那麼它可以滿足任一要求。 – 2009-12-15 00:05:33