Ich entwickle eine App, in der viele Dateien gespeichert werden. Bei Bildern wird die Größe geändert und die verschiedenen benötigten Miniaturansichten werden gespeichert. Wenn ein Benutzer ein Bild hochlädt, werden mehr als 8 Dateien gespeichert (dies ist erforderlich) ).
Um doppelte Dateien zu vermeiden und Speicherplatz auf meinem statischen Hosting-Server zu sparen, speichert meine App den Dateinamen als "MD5.BYTE_SIZE" (Beispiel: 054d995efa7e9c91569d205d24a2b486.188154)
Ich habe dieses Dateischema bereits auf anderen Clients ohne Probleme verwendet, aber ich muss speziell für dieses Projekt wissen, ob die Möglichkeit besteht, dass der Benutzer eine Datei mit demselben MD5 und derselben Größenlänge sendet.
Wenn ja, wie kann ich meine Dateinamen am besten speichern? Mit zwei verschiedenen Hashes (wie MD5.SHA-256.BYTE_SIZE)?
Antworten:
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, wird (aus praktischen Gründen) "Null" angezeigt, auch wenn der Benutzer aktiv versucht, zwei Dateien mit derselben Größe zu erstellen.
Die genaue Wahrscheinlichkeit, dass zwei verschiedene Dateien denselben Hash erzeugen, liegt bei etwa 1/2 ^ 128. Aufgrund des Geburtstagsparadoxons würden Sie ungefähr 2 ^ 64 Dateien benötigen, bis eine 50% ige Wahrscheinlichkeit besteht, dass zwei den gleichen Hash haben. Mach dir darüber in der Praxis keine Sorgen. Für SHA256 lauten die Zahlen 1/2 ^ 256 bzw. 2 ^ 128. Diese Zahlen werden auch als "nicht passieren" bezeichnet.
quelle
Es ist theoretisch möglich, aber in Wirklichkeit ist die Wahrscheinlichkeit, dass zwei verschiedene Dateien dieselbe MD5-Prüfsumme haben, sehr gering.
Mit anderen Worten, so klein, dass Sie dieses Ereignis für Ihr Programm so gut wie unmöglich behandeln können.
quelle