Wie hoch ist die Wahrscheinlichkeit, dass zwei Dateien mit gleicher Byte-Größenlänge denselben MD5-Hash ergeben?

Wie hoch ist die Wahrscheinlichkeit, dass zwei Dateien mit gleicher Byte-Größenlänge denselben MD5-Hash ergeben?

Ich entwickle eine App, die eine große Anzahl von Dateien speichern kann. Bei Bildern wird sie deren Größe ändern und die verschiedenen Miniaturansichten speichern, die wir brauchen, so dass, wenn ein Benutzer ein Bild hochlädt, weitere 8 Dateien gespeichert werden (das ist nötig).

Um doppelte Dateien zu vermeiden und Platz auf meinem statischen Hosting-Server zu sparen, speichert meine App den Dateinamen als „MD5.BYTE_SIZE“ (Beispiel: 054d995efa7e9c91569d205d24a2b486.188154).

Ich habe dieses Dateischema bereits problemlos auf anderen Clients verwendet, muss aber speziell für dieses Projekt wissen, ob die Möglichkeit besteht, dass der Benutzer eine Datei mit demselben MD5 und derselben Größe sendet.

Wenn ja, wie speichere ich meine Dateinamen am besten? Mit zwei unterschiedlichen Hashes (wie MD5.SHA-256.BYTE_SIZE)?

Antwort1

Aus praktischen Gründen Null, es sei denn, der Benutzer versucht aktiv, zwei Dateien mit demselben Hash zu erstellen, was mit MD5 möglich ist.

Wenn Sie stattdessen SHA-256 verwenden, „Null“ (aus praktischen Gründen), selbst wenn der Benutzer aktiv versucht, zwei Dateien mit derselben Größe zu erstellen.

Die genaue Wahrscheinlichkeit liegt bei etwa 1/2^128, dass zwei verschiedene Dateien denselben Hash erzeugen. Aufgrund des Geburtstagsparadoxons bräuchten Sie etwa 2^64 Dateien, bis eine 50%ige Chance besteht, dass zwei den gleichen Hash haben. Machen Sie sich in der Praxis keine Sorgen darüber. Für SHA256 lauten die Zahlen 1/2^256 bzw. 2^128. Diese Zahlen werden auch als „wird nicht passieren“ bezeichnet.

Antwort2

Theoretisch ist es möglich, aber in Wirklichkeit ist die Wahrscheinlichkeit, dass zwei verschiedene Dateien die gleiche MD5-Prüfsumme haben, verschwindend gering.

Mit anderen Worten so klein, dass Sie dieses Ereignis für Ihr Programm im Wesentlichen als unmöglich betrachten können.

verwandte Informationen