RFZ: md5 zum cachen beliebiger urls geeignet?

Nabend zusammen,
ich nutze auf einigen meiner Websites oft den md5 hash eines Dateinamens (z.B. eines Bildes) um damit eine gecachte Datei (z.B. das Thumbnail davon) abzuspeichern. Der Grund dafür ist, dass ich ewig lange und mit Sonderzeichen gefüllte Dateinamen lieber vermeiden möchte.

Wenn ich jetzt aber ein größeres Projekt starten würde, also z.B. Thumbnails für Bilder die über eine beliebige URL erreichbar sind, ist dann md5 noch eine gute Wahl, oder besteht die Chance dass es dann zu Überschneidungen kommt?

Also konkret, kann es mir (mit nicht vernachlässigbar kleiner Wahrscheinlichkeit) passieren dass thumb.php?http://domain1/bild1.jpg mir dann das selbe Thumbnail wie für thumb.php?http://domain2/bild2.jpg liefert, wenn ich nur md5 der URL als Identifikationskriterium nutze?

Was würdet ihr sonst vorschlagen? Ich möchte eigentlich die URL direkt auf einen Dateinamen abbilden. Ich könnts natürlich auch via Datenbank und ID machen, dann wärs eindeutig, aber lieber wärs mir ohne :)

greetz RFZ

  1. Hallo,

    MD5 wurde zwar geknackt aber das kommt wohl vernachlässigbar selten vor.

    Grüße
    Jeena Paradies

  2. Hallo,

    Also konkret, kann es mir (...) passieren dass thumb.php?http://domain1/bild1.jpg mir dann das selbe Thumbnail wie für thumb.php?http://domain2/bild2.jpg liefert, wenn ich nur md5 der URL als Identifikationskriterium nutze?

    Dies kann passieren, allerdings ist die Wahrscheinlichkeit, dass
    md5(a) = md5(b)  mit  a != b

    gilt: 1 zu 2^128

    Also die Wahrscheinlichkeit, dass zwei unterschiedliche Strings den gleichen Hashwert ergeben, liegt bei ca. 1 zu 3,4 * 10^38

    Beim Lotto hast du eine Chance von ca. 1 zu 1,4 * 10^7, also ist es ~600 mal Wahrscheinlicher, dass beim Lotto _5_ mal gleichen Zahlen nacheinander gezogen werden, also dass zwei Eingaben den gleichen MD5 Hashwert ergeben.

    Wenn dir das immer noch zu unsicher ist, kannst du auch die PHP Funktion sha1(); verwenden, da ist die Chance 1 zu 1^160, also  ~4 Mrd. mal unwahrscheinlicher als bei md5.

    MFG

    1. Hallo,

      Wenn dir das immer noch zu unsicher ist, kannst du auch die PHP Funktion sha1(); verwenden, da ist die Chance 1 zu 1^160, also  ~4 Mrd. mal unwahrscheinlicher als bei md5.

      Auch wenn es wohl nur auf einem Tippfehler beruht, aber das kann man unmöglich so stehen lassen! 1 zu 1^160 ist das gleiche wie 1 zu 1^12 !!

      *scnr*

      werbeklaus

    2. Also die Wahrscheinlichkeit, dass zwei unterschiedliche Strings den gleichen Hashwert ergeben, liegt bei ca. 1 zu 3,4 * 10^38

      Beim Lotto hast du eine Chance von ca. 1 zu 1,4 * 10^7, also ist es ~600 mal Wahrscheinlicher, dass beim Lotto _5_ mal gleichen Zahlen nacheinander gezogen werden, also dass zwei Eingaben den gleichen MD5 Hashwert ergeben.

      Jo, dass die Wahrscheinlichkeit klein ist, weiss ich :) Aber es geht ja rein darum, dass es passieren könnte.

      Du würdest aber also soein System als legitim bezeichnen? Nur darum gehts mir, ob z.B. selbst 'professionelle' Programmierer auf soeine Wahrscheinlichket pfeiffen würden, oder ob die eine bessere Lösung suchen würden :)

      greetz RFZ

      1. Hallo Freunde des gehobenen Forumsgenusses,

        Du würdest aber also soein System als legitim bezeichnen? Nur darum gehts mir, ob z.B. selbst 'professionelle' Programmierer auf soeine Wahrscheinlichket pfeiffen würden, oder ob die eine bessere Lösung suchen würden :)

        Wenn dir SHA1 noch nicht sicher genug ist könntest du die Werte von MD5 und SHA1 aneinander hängen. Dann ist die Wahrscheinlichkeit für eine Kollision [latex]1 : 2^{128+160}[/latex].

        Gruß
        Alexander Brock

  3. Hi,

    Wenn ich jetzt aber ein größeres Projekt starten würde, also z.B. Thumbnails für Bilder die über eine beliebige URL erreichbar sind, ist dann md5 noch eine gute Wahl, oder besteht die Chance dass es dann zu Überschneidungen kommt?

    Hängt insbesondere auch von der Menge der Daten ab.

    Beispiel: 2 Personen, die Wahrscheinlichkeit, daß die beiden an verschiedenen Tagen Geburtstag haben, ist 364/365 - aber schon bei relativ wenigen [23 iirc] Personen ist die Wahrscheinlichkeit, daß alle verschiedene Geburtstage haben, kleiner als die Wahrscheinlichkeit, daß mind. 2 aus der Gruppe am gleichen Tag Geburtstag haben.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  4. Ich als Softwareentwickler würde mir das Hirn deswegen nicht zermartern; dazu ist eine Kollision selbst für Riesenprojekt zu unwahrscheinlich.

    1. Hallo RFZ,

      Ich als Softwareentwickler würde mir das Hirn deswegen nicht zermartern; dazu ist eine Kollision selbst für Riesenprojekt zu unwahrscheinlich.

      allerdings sollte man immer den Fall bedenken, dass ein Angreifer eine Kollision provozieren kann.
      Vielleicht baust du in deinem Programm einfach eine Kollisionsbehandlung ein. Dann würde ich es als sauber bezeichnen.

      Gruß,
      Benne

      --
      ie:% fl:( br:> va:) ls:> fo:| rl:° ss:) de:[ js:| ch:| mo:} zu:)