デモプロジェクトでは、衝突の可能性が非常に高いハッシュ関数を作成したいと思います。プロジェクトの目的はセキュリティではなく、ハッシュの衝突を示すことなので、単純なもので十分です。
誰かが私がアルゴリズムやサンプル実装を始めるのを手伝ってくれるか、それとも私を正しい方向に向けるだけですか?
私はこれをPythonで行っていますが、おそらくそれは問題ではないはずです。
文字列内の文字の合計を使用できます。これは、高校で初めてBASICを学んだときに教えられた最初のハッシュ関数であり、すぐに衝突の問題に遭遇し、その対処方法を理解する必要がありました。
sum(ord(c) for c in text)
転置は、文字列や単語を交換することで簡単に実現できます。さらに楽しくするために、大文字と小文字を区別しないようにすることもできます。
sum(ord(c) for c in text.lower())
最後の衝突のサンプルも提供します:Jerry Kindall-> Dillan Kyrjer :-)
頭に浮かぶアルゴリズムの1つは、文字列の最初の文字を使用したハッシュです。
何かのようなもの
hash[ord(text[0]) - ord('a')] = text
したがって、同じ文字で始まるものはすべて一緒にハッシュされます。ご覧のとおり、これは多くの衝突です。
もう1つのアイデアは、文字列の長さに応じてハッシュすることです。
hash[len(text)] = text
ヘイデンが上記のコメントで示唆していることを使用し、長さを法的な数にすることでさらに衝突を引き起こすことができます。例えば。
hash[len(text) % 5] = text