2010-12-16 5 views
0

Frage ist ziemlich einfach, aber ich konnte keine Antwort für diese eine finden ... Grundsätzlich erzeugt meine Anwendung Dateinamen mit md5(time());.Chance bei der Generierung von 2 gleichen Hashes basierend auf Zeit()?

Wie hoch sind die Chancen, dass mit dieser Technik 2 gleiche Ergebnisse erzielt werden?

P.S. Da mein Fragetitel sagt Hashes nicht genau Hash, was sind die Chancen, falls überhaupt, wieder gleiche Ergebnisse für jede Art von Hashes sha1();, sha512(); etc. zu generieren?

Vielen Dank im Voraus!

+1

Wie hoch ist die Wahrscheinlichkeit, dass jemand die Systemzeit ändert? – khachik

+0

@khachik: NTP könnte das tun, wenn Sie es verwenden. –

Antwort

0

Equal Ergebnisse sind unwahrscheinlich, daraus resultieren, können Sie einfach, dass selbst überprüfen, indem Sie die Einzigartigkeit md5(0) Überprüfung ... md5(INT32_MAX) da, dass der gesamte Bereich eines time_t ist. Ich glaube nicht, dass es in diesem Eingabefeld Kollisionen für einen der Hashes gibt, die Sie benannt haben.

Vorhersehbar Ergebnisse ist eine andere Sache, obwohl. Durch die Wahl time() als Eingabe Lieferanten, beschränken Sie sich, na ja, einen eindeutigen Hash pro Sekunde, nicht mehr als 86.400 pro Tag, ...

1

Meine Einschätzung ist es aufgrund möglicher Veränderungen in der Zeit durch die Menschen unsicher ist und andere Verfahren wie NTP, die FrankH freundlicherweise zur Kenntnis genommen hat. Ich empfehle dringend, einen kryptografisch sicheren RNG (Zufallszahlengenerator) zu verwenden, wenn Ihr Framework dies zulässt.

+0

Interessante Antwort, aber was beschreiben Sie als kryptografisch sicheren RNG? – jolt

+0

Wikipedia hat einen guten Artikel zu diesem Thema: http://en.wikipedia.org/wiki/Cryptographic_secure_pseudorandom_number_generator .NET bietet eine solche RNG in RNGCryptoServiceProvider –

Verwandte Themen