Amazon S3に画像ライブラリがあります。各画像について、サーバー上のソースURLとタイムスタンプをmd5で一意のファイル名を取得します。 S3にはサブディレクトリを作成できないため、これらのすべての画像を単一のフラットフォルダーに保存する必要があります。
生成されるMD5ハッシュ値の衝突を心配する必要がありますか?
ボーナス:MD5が生成するハッシュ値に衝突が見られるようになる前に、いくつのファイルを保持できますか?
誤って2つのハッシュが衝突する確率は1/2128これは、 340 undecillion 282 decillion 366 nonillion 920 octillion 938 septillion 463 sextillion 463 quintillion 374 quadrillion 607 trillion 431 billion 768 million 211千456に1つです。
ただし、すべてのハッシュを保持する場合、 birthday paradox のおかげで確率は少し高くなります。ハッシュが必要な他のハッシュと衝突する可能性を50%にするには、264ハッシュ。これは、衝突を得るために、平均して、ハッシュ 6 billion files per / for 100年 。
S3はサブディレクトリを持つことができます。キー名に「/」を入力するだけで、別のディレクトリにあるかのようにファイルにアクセスできます。これを使用して、S3のユーザーIDに基づいてユーザーファイルを個別のフォルダーに保存します。
例:「mybucket/users/1234/somefile.jpg」。ファイルシステムのディレクトリとはまったく同じではありませんが、S3 APIには、ほぼ同じように機能するいくつかの機能があります。 「users/1234 /」で始まるすべてのファイルをリストするように要求できますが、その「ディレクトリ」内のすべてのファイルが表示されます。
待って、それは:
md5(filename) + timestamp
または:
md5(filename + timestamp)
前者の場合、GUIDへのほとんどの道はあなたであり、私はそれについて心配しません。後者の場合は、最終的に衝突に遭遇する方法についてKargの投稿を参照してください。
衝突の大まかな目安は、値の範囲の平方根です。 MD5 sigはおそらく128ビット長なので、2 ^ 64の画像を超えて衝突が発生する可能性が高くなります。
ランダムなMD5衝突は非常にまれですが、ユーザーが(逐語的に保存される)ファイルを提供できる場合、衝突が発生するように設計できます。つまり、同じMD5sumで異なるデータを持つ2つのファイルを意図的に作成できます。アプリケーションがこのケースを適切な方法で処理できることを確認するか、SHA-256のような強力なハッシュを使用することをお勧めします。
衝突が原因でMD5の問題が広く公表されていますが、ランダムデータ間のUNINTENTIONAL衝突は 非常にまれ です。一方、ファイル名でハッシュしている場合、それはランダムなデータではなく、衝突がすぐに起こると予想されます。
MD5コリジョンはほとんどありません。 9兆 MD5がある場合、9兆に衝突する可能性は1つだけです。
それがどれほど可能性があるかは本当に関係ありません。可能です。最初の2つのハッシュで発生する可能性があります(非常に可能性は低いですが可能です)ので、最初から衝突をサポートする必要があります。