
我正在開發一個應用程序,它將儲存大量文件,如果是圖像,它將調整它們的大小並保存我們需要的不同縮圖,因此當用戶上傳圖像時,它將保存更多8個文件(這是需要的) )。
為了避免重複檔案並節省靜態託管伺服器上的空間,我的應用程式將檔案名稱儲存為「MD5.BYTE_SIZE」(例如:054d995efa7e9c91569d205d24a2b486.188154)
我已經在其他客戶端上使用了這個文件方案,沒有任何問題,但我需要知道,特別是對於這個項目,用戶是否有可能發送具有相同 MD5 和相同大小長度的文件。
如果是這樣,保存檔案名稱的最佳方法是什麼?使用兩個不同的雜湊值(例如 MD5.SHA-256.BYTE_SIZE)?
答案1
出於實際目的,為零,除非使用者主動嘗試建立兩個具有相同哈希值的檔案(MD5 可以做到這一點)。
如果您改用 SHA-256,即使使用者主動嘗試建立兩個大小相同的文件,「零」(出於實際目的)也是如此。
兩個不同檔案產生相同哈希值的確切機率約為 1/2^128。由於生日悖論,您將需要大約 2^64 個文件,直到有 50% 的機會兩個文件具有相同的雜湊值。實務上不用擔心。對於 SHA256,數字分別為 1/2^256 和 2^128。這些數字也被稱為「不會發生」。
答案2
理論上是可能的,但實際上兩個不同文件具有相同 MD5 校驗和的機會微乎其微。
換句話說,對於您的程式而言,您基本上可以將此事件視為不可能發生。