2011-11-26 18 views
6

我想用文件創建一個數據庫。而且,爲了輕鬆搜索這些文件,我想使用某種散列技術。但是,我不僅要查找完全相同的文件,還要檢查文件的部分文件是否相同(即文件類似)。換句話說,類似的文件應該有類似的哈希值。如何創建類似輸入的哈希?

這意味着這種哈希的是不是一個真正的加密哈希,因爲不應該有一個「雪崩效應」(雪崩效應是指數據的每一位影響其他數據的所有其他位。)

另一個事情是,哈希不需要單向,因爲它不是用於安全目的,而是用於比較文件。

所以在本質上,我在尋找一種算法,可以爲每個獨特的輸入,創造一個獨特的哈希:

  • 擁有(幾乎)無碰撞

  • 創建一個類似的輸出類似的輸入

  • 比原來的文件短(否則它會更快地簡單地比較原始文件)。

我想的像添加前兩個字符一起,然後加入第三和4rth在一起,等等。然而,這具有碰撞的一個巨大的量,因爲「1 + 4」是一樣的「 2 + 2「等

我真的不知道如何開始。請有人賜教我嗎? :)

+1

這可能是非常困難的。查看http://en.wikipedia.org/wiki/Agrep –

+2

如果工作是查找具有常見字節的文件,[ssdeep](http://ssdeep.sourceforge.net/)非常棒。 –

+0

你會在創建一個壓縮算法,然後進行排序。您將使用所有壓縮輸入的相同頻率表來確定事物。 – sehe

回答

1

我目前使用ssdeep來達到同樣的效果,並且我得到了相當不錯的結果。

我也讀過sdhash比ssdeep好。