2012-08-24 35 views
1

對於演示項目,我想創建具有非常高的碰撞概率的散列函數。簡單的事情很好,因爲該項目的目標不是安全 - 而是要演示散列衝突。實現具有衝突的散列函數

任何人都可以幫助我開始使用算法或示例實現,或者只是將我指向正確的方向?

我在Python中這樣做,但也許這應該不重要。

+0

哈希*什麼*?字符串,整數,浮點數,元組,小數,其他東西? – delnan

回答

4

您可以使用字符串中字符的總和。這是我在高中第一次學習BASIC時教過的第一個散列函數,我馬上就碰到了碰撞問題,不得不弄清楚如何處理它。

sum(ord(c) for c in text) 

換位很容易通過交換字符串甚至單詞來實現。對於更多的樂趣,你也可以讓它不區分大小寫:

sum(ord(c) for c in text.lower()) 

我甚至給你的是最後一個樣本碰撞:傑裏·金德爾 - > Dillan Kyrjer :-)

+3

要輕鬆增加碰撞機會,您可以計算這個總和%10(或其他數字)。 :) –

+0

由於區分大小寫,Jerry Kindall不會與Dillan Kyrjer發生衝突 - ord('d')!= ord('D') –

+1

這就是爲什麼我說這是爲了* last * one。不區分大小寫的那個。 – kindall

0

一種算法自帶要介意使用字符串的第一個字母散列。

喜歡的東西

hash[ord(text[0]) - ord('a')] = text 

,所以,只要開始有相同的字母將一起散列。正如你所看到的,這是很多碰撞。

另一個想法是根據字符串的長度進行散列。

hash[len(text)] = text 

您可以使用上面的意見提出什麼海登,並採取長短造成進一步的衝突模一定數量。例如。

hash[len(text) % 5] = text