有沒有一個散列函數,其中輸入的小變化導致輸出的小變化?例如,像:將類似輸入映射到類似輸出的散列函數?
hash("Foo") => 9e107d9d372bb6826bd81d3542a419d6
hash("Foo!") => 9e107d9d372bb6826bd81d3542a419d7 <- note small difference
有沒有一個散列函數,其中輸入的小變化導致輸出的小變化?例如,像:將類似輸入映射到類似輸出的散列函數?
hash("Foo") => 9e107d9d372bb6826bd81d3542a419d6
hash("Foo!") => 9e107d9d372bb6826bd81d3542a419d7 <- note small difference
一個平凡的解決方案將是XOR所有字節模塊N.例如對於一個64位散列,你需要XOR(輸入[0] ^輸入[8] ^輸入[16])+ 256 *(輸入[1] ^輸入[9] ^輸入[17])等。 因此, 「Foo」哈希爲「Foo \ 0 \ 0 \ 0 \ 0 \ 0」和「Foo!」哈希到「Foo!\ 0 \ 0 \ 0 \ 0」。
局部敏感哈希(LSH)降低了高維數據的維數。 LSH散列輸入項,使得類似的項目 映射到相同的「桶」以高概率:
https://en.wikipedia.org/wiki/Locality-sensitive_hashing
另見:https://en.wikipedia.org/wiki/Perceptual_hashing
這裏是感性散列對DNA序列的很好的例子:
這將是一個真的* *糟糕的散列算法.... – skaffman 2009-11-06 11:41:18
對於密碼散列,是的,這會很糟糕,但我想用它來做其他事情。 – 2009-11-06 11:50:45
我認爲你需要提供更多細節,以瞭解這種功能的預期用途。 該屬性絕對沒有加密哈希函數,但也許你正在尋找不同的東西? – Krystian 2009-11-06 11:51:48