2009-11-06 99 views
2

有沒有一個散列函數,其中輸入的小變化導致輸出的小變化?例如,像:將類似輸入映射到類似輸出的散列函數?

hash("Foo") => 9e107d9d372bb6826bd81d3542a419d6 
hash("Foo!") => 9e107d9d372bb6826bd81d3542a419d7 <- note small difference 
+1

這將是一個真的* *糟糕的散列算法.... – skaffman 2009-11-06 11:41:18

+0

對於密碼散列,是的,這會很糟糕,但我想用它來做其他事情。 – 2009-11-06 11:50:45

+0

我認爲你需要提供更多細節,以瞭解這種功能的預期用途。 該屬性絕對沒有加密哈希函數,但也許你正在尋找不同的東西? – Krystian 2009-11-06 11:51:48

回答

0

一個平凡的解決方案將是XOR所有字節模塊N.例如對於一個64位散列,你需要XOR(輸入[0] ^輸入[8] ^輸入[16])+ 256 *(輸入[1] ^輸入[9] ^輸入[17])等。 因此, 「Foo」哈希爲「Foo \ 0 \ 0 \ 0 \ 0 \ 0」和「Foo!」哈希到「Foo!\ 0 \ 0 \ 0 \ 0」。

4

我不會稱之爲散列,因爲散列的點恰恰相反。然而,你所說的目標是輸入產生微小變化的小變化,我會考慮使用soundex函數或Ratcliff算法。