對於演示項目,我想創建具有非常高的碰撞概率的散列函數。簡單的事情很好,因爲該項目的目標不是安全 - 而是要演示散列衝突。實現具有衝突的散列函數
任何人都可以幫助我開始使用算法或示例實現,或者只是將我指向正確的方向?
我在Python中這樣做,但也許這應該不重要。
對於演示項目,我想創建具有非常高的碰撞概率的散列函數。簡單的事情很好,因爲該項目的目標不是安全 - 而是要演示散列衝突。實現具有衝突的散列函數
任何人都可以幫助我開始使用算法或示例實現,或者只是將我指向正確的方向?
我在Python中這樣做,但也許這應該不重要。
您可以使用字符串中字符的總和。這是我在高中第一次學習BASIC時教過的第一個散列函數,我馬上就碰到了碰撞問題,不得不弄清楚如何處理它。
sum(ord(c) for c in text)
換位很容易通過交換字符串甚至單詞來實現。對於更多的樂趣,你也可以讓它不區分大小寫:
sum(ord(c) for c in text.lower())
我甚至給你的是最後一個樣本碰撞:傑裏·金德爾 - > Dillan Kyrjer :-)
要輕鬆增加碰撞機會,您可以計算這個總和%10(或其他數字)。 :) –
由於區分大小寫,Jerry Kindall不會與Dillan Kyrjer發生衝突 - ord('d')!= ord('D') –
這就是爲什麼我說這是爲了* last * one。不區分大小寫的那個。 – kindall
一種算法自帶要介意使用字符串的第一個字母散列。
喜歡的東西
hash[ord(text[0]) - ord('a')] = text
,所以,只要開始有相同的字母將一起散列。正如你所看到的,這是很多碰撞。
另一個想法是根據字符串的長度進行散列。
hash[len(text)] = text
您可以使用上面的意見提出什麼海登,並採取長短造成進一步的衝突模一定數量。例如。
hash[len(text) % 5] = text
哈希*什麼*?字符串,整數,浮點數,元組,小數,其他東西? – delnan