私はいくつかのデータオブジェクトの32ビットのハッシュを作成しようとしています。私自身のハッシュ関数を書くのは気にならず、md5が利用可能であるので、私の現在の方法は、md5ハッシュから最初の32ビット(すなわち最初の8桁の16進数)を使うことです。これは受け入れられますか?md5ハッシュの最初の32ビットは他の部分文字列と同じように「ランダム」であるか?
つまり、他の部分文字列と同様に、md5ハッシュの最初の32ビットは「ランダム」と同じですか?また、最後の32ビットを好む理由がありますか?あるいは、おそらく4つの32ビット部分文字列をXORしますか?
いくつかの先制明確化:
- これらのハッシュは、暗号的に安全である必要はありません。
- 私はmd5のパフォーマンスには関心がありません。私のニーズには十分に速いです。
- これらのハッシュは、衝突が稀であるほど十分に「ランダム」である必要があります。
- このシステムでは、アイテムの数は10,000を超えてはいけません(現実的には、それはおそらく半分にはならないでしょう)。したがって、最悪の場合、衝突に遭遇する確率は、(十分に「ランダム」なハッシュが見つかったと仮定して)約1%でなければなりません。すなわち
すでにMD5ハッシュが計算されていますか? (Subversionチェックインのメタデータの一部など)、またはMD5ハッシュを自分で計算する必要がありますか?後者の場合、@Johannesのコメントに同意すると、CRC32はもっと簡単になります。 –
どうやら先制的に "あなたの質問はこのようにしなければならないので無効です"とコメントしています。 – Kip
申し訳ありませんが、私はMD5ハッシュを使用していません。 CRC32がより簡単であることを意味します。あなたまたはあなたの顧客だけがあなたの要件を満たすアルゴリズムを判断することができます。 –