いくつかのデータ オブジェクトの 32 ビット ハッシュを作成しようとしています。私は独自のハッシュ関数を書く気がなく、md5 が利用可能であるため、現在のアプローチは md5 ハッシュの最初の 32 ビット (つまり最初の 16 進数の 8 桁) を使用することです。これは受け入れられますか?
つまり、md5 ハッシュの最初の 32 ビットは、他の部分文字列と同じように「ランダム」ですか? それとも、たとえば最後の 32 ビットを好む理由はありますか? それとも、4 つの 32 ビット部分文字列を XOR して一緒にするのでしょうか?
いくつかの先制的な説明:
- これらのハッシュは、暗号的に安全である必要はありません。
- 私は md5 のパフォーマンスには関心がありません。それは、私のニーズに対して十分に高速です。
- これらのハッシュは、衝突がほとんど起こらないように十分に「ランダム」である必要があります。
- このシステムでは、アイテムの数が 10,000 を超えないようにする必要があります (現実的には、おそらくその半分にはならないでしょう)。したがって、最悪の場合、衝突に遭遇する確率は約 1% になります (十分に「ランダムな」ハッシュが見つかったと仮定します)。