Frage

Ich habe ein Bild-Bibliothek auf Amazon S3 bekam. Für jedes Bild, md5 ich die Quell-URL auf meinem Server und einen Zeitstempel einen eindeutigen Dateinamen zu erhalten. Da S3 nicht Verzeichnisse haben, muss ich alle diese Bilder in einem einzelnen flachen Ordner speichern.

Habe ich über Kollisionen in dem MD5-Hash-Wert kümmern, die produziert wird?

Bonus: Wie viele Dateien kann ich, bevor ich anfangen würde Kollisionen in dem Hash-Wert zu sehen, dass MD5 erzeugt

War es hilfreich?

Lösung

Die Wahrscheinlichkeit von nur zwei Hashes versehentlich kollidiert ist 1/2 128 , die 1 in 340 Undecillion 282 decillion 366 nonillion 920 octillion 938 septillion 463 sextillion 463 Trillionen 374 Billi 607 Billionen 431 Milliarden 768 Millionen 211 tausend 456.

>

Allerdings, wenn Sie halten alle Hashes dann ist die Wahrscheinlichkeit ist etwas höher dank Geburtstagsparadox . Um eine 50% ige Chance eines Hash mit einem anderen Hash-Kollision Sie benötigen 2 64 Hashes. Dies bedeutet, dass eine Kollision zu erhalten, im Durchschnitt, werden Sie Hash müssen 6 Milliarden Dateien pro Sekunde 100 Jahre .

Andere Tipps

S3 können Unterverzeichnisse haben. Einfach ein „/“ in den Schlüsselnamen, und Sie können die Dateien zugreifen, als ob sie in separaten Verzeichnissen waren. Ich benutze diese auf ihrer Benutzer-ID in S3 basierten Benutzer-Dateien in separaten Ordnern zu speichern.

Zum Beispiel: "mybucket / users / 1234 / somefile.jpg". Es ist nicht genau das gleiche wie ein Verzeichnis in einem Dateisystem, aber die S3 API einige Funktionen, die es fast die gleichen Arbeit lassen. Ich kann es fragen, um alle Dateien auflisten, die mit „Benutzer / 1234 /“ beginnen und es zeigt mir alle Dateien in diesem „Verzeichnis“.

So warten, ist es:

md5(filename) + timestamp

oder:

md5(filename + timestamp)

Wenn die ehemaligen, Sie sind die meisten des Weges zu einer GUID, und ich würde mir keine Sorgen. Wenn letzteres, dann sieht Karg die Post darüber, wie Sie in Kollisionen schließlich laufen werden.

Eine grobe Daumenregel für Kollisionen ist die Quadratwurzel des Wertebereichs liegt. Ihre MD5 sig ist vermutlich 128 Bit lang, so dass Sie gehen wahrscheinlich sein, um zu sehen Kollisionen weit über 2 ^ 64 Bilder.

Obwohl zufällige MD5-Kollisionen äußerst selten sind, wenn die Benutzer Dateien zur Verfügung stellen können (das wörtlich gespeichert werden), dann können sie Kollisionen konstruieren zu kommen. Das heißt, sie absichtlich erstellen zwei Dateien mit dem gleichen MD5sum aber unterschiedlichen Daten. Stellen Sie sicher, dass Ihre Anwendung diesen Fall in einer vernünftigen Art und Weise handhaben kann, oder vielleicht eine stärkere Hash wie SHA-256 verwendet werden.

scroll top