2011-06-15 71 views
0

我正在尋找一種方法來識別數據,以防止它在內存中多次加載。我認爲這樣做的一個好方法是爲每個數據緩衝區創建一個散列,並將其用作一種id。散列數據。適當的算法?

,我需要從8張KB的圖片散列範圍,40個KB的動畫,到3 – 5 MB的音樂文件,以< 0.5 MB的聲音文件中的數據。你認爲什麼是我的情況最好的哈希算法?對於這個問題,將數據散列到要走的路上,還是應該考慮用其他方法來識別數據?

回答

1

有許多的廣泛使用強算法:

  • SHA512(128個字節)
  • SHA384(96個字節)
  • SHA224(56個字節)
  • SHA1和RIPEMD160(40字節)
  • MD5(32個字節)(如老式MD4和MD2

較弱的一個 * CRC(10字節)拇指

的一般規則:與它們的大小

  • 碰撞

    • 在您的收藏元素的數量碰撞概率增大,概率隨着校驗和中的位數而減少

    散列要走的路。請記住,對於非常非常大的項目集合,您應該考慮發生衝突的概率(即使用散列查找,然後按內容進行線性搜索)。

    只要你似乎是存儲文件,它可能是很好的做一個複合鍵:

    • 內容
    • 文件名
    • 文件長度

    該散列具有以下優點:

    1. has c ollisions因爲所有的實際目的而不在場,因爲碰撞相同長度的不同數據樣本的機會大大低於僅與任何數據隨機樣本發生碰撞的風險
    2. 您的收藏是立即內容可尋址(意思是:你不需要文件名來查找內容;您可以使用內容哈希掃描的另一個名字重複,因爲哈希不依賴於名字)

    $ 0.02

  • 0

    我會從比較文件大小開始。如果它們相同,則可以使用一些快速哈希算法,如Adler32或VMAC-64。