
私は大量のファイルを保存するアプリを開発しています。画像の場合は、サイズを変更して必要なさまざまなサムネイルを保存するので、ユーザーが画像をアップロードすると、さらに 8 つのファイルが保存されます (これは必要です)。
ファイルの重複を避け、静的ホスティング サーバーのスペースを節約するために、アプリはファイル名を「MD5.BYTE_SIZE」として保存します (例: 054d995efa7e9c91569d205d24a2b486.188154)
このファイル スキームは既に別のクライアントで問題なく使用していますが、特にこのプロジェクトでは、ユーザーが同じ MD5 と同じサイズの長さのファイルを送信する可能性があるかどうかを知る必要があります。
もしそうなら、ファイル名を保存する最適な方法は何ですか? 2 つの異なるハッシュ (MD5.SHA-256.BYTE_SIZE など) を使用する方法はありますか?
答え1
実用上は、ユーザーが同じハッシュを持つ 2 つのファイルを積極的に作成しようとしない限り、ゼロです (MD5 ではこれが可能です)。
代わりに SHA-256 を使用すると、ユーザーが同じサイズの 2 つのファイルを積極的に作成しようとしても、「ゼロ」(実用上) になります。
2 つの異なるファイルが同じハッシュを生成する正確な確率は、約 1/2^128 です。誕生日のパラドックスにより、2 つのファイルが同じハッシュを持つ確率が 50% になるまでには、約 2^64 個のファイルが必要になります。実際には心配する必要はありません。SHA256 の場合、その数はそれぞれ 1/2^256 と 2^128 です。これらの数は、「発生しない」とも呼ばれます。
答え2
理論的には可能ですが、実際には 2 つの異なるファイルが同じ MD5 チェックサムを持つ可能性は極めて低くなります。
言い換えれば、非常に小さいので、プログラムに関する限り、このイベントを本質的に不可能なものとして扱うことができます。