Der-Dennis: Zufallszahl

Beitrag lesen

Hallo Jnnbo

ich erzeige mit

md5(uniqid());

eine Zufallszahl für meine Einträge, wenn ich komplett fertig bin, sind es gut 10.000 Einträge. Wie hoch ist die Gefahr, dass ich damit doppelte Zahlenwerte habe?

dass uniqid() keine Zufallszahlen generiert, hat Sven ja schon beschrieben. uniqid() macht wirklich nicht viel anderes, als eine Zeiteinheit, in (Dezimal-) Mikrosekunden gerechnet, in ein anderes Zahlensystem, hier das Hexadezimalsystem, zu überführen. Du kannst also (fast) beliebig damit hin-und-her rechnen. Dass das so ist, kannst Du auch schon am Quellcode sehen. Oder mal selbst Funktionen wie base_convert() oder ähnliches ausprobieren. Andere haben sich da schon mit beschäftigt.

Auch dass MD5 daran nichts wirklich ändert oder die Sache im ungünstigsten Fall sogar verschlechtert, hat Jörg schon angesprochen. Sollte MD5 in dieser Hinsicht funktionieren, was es offensichtlich tut, wirst Du für denselben Input immer das gleiche Ergebnis erhalten.

Was Du machst ist also wohl Security through obscurity oder Obfuskation. Das ist im Normalfall ein nettes Gimmick, mehr nicht. Daran kannst Du auch durch die mehrfache Anwendung von uniqid() nichts ändern. Du könntest mit ähnlichem Ergebnis auch die Cäsar-Verschlüsselung (in PHP z.B. str_rot13() o.ä.) verwenden. Irgendwo hier im Forum gab's in letzter Zeit auch noch einen Beitrag zu base64_encode() (finde ich gerade leider nicht, ändert aber auch nichts daran, dass das nichts mit Zufall zu tun hat, auch wenn es auf den ersten Blick so aussehen könnte).

Aber jetzt wieder zurück zu Deiner Frage:

Wie hoch ist die Gefahr, dass ich damit doppelte Zahlenwerte habe?

Wenn uniqid() so funktioniert, wie es gedacht ist: Gleich null.

Ansonsten: Nahezu null. Denn würde uniqid() Zufallszahlen generieren und wären diese absolut gleichverteilt, kannst Du Dir die Wahrscheinlichkeit mit Hilfe der Laplace-Formel ausrechnen. Ansonsten wird es etwas komplizierter, das Ergebnis dürfte aber in etwa das Gleiche sein. Auch wenn das häufig völlig an der eigenen Intuition verbeigeht, siehe z.B. das Geburtstagsparadoxon (welches ziemlich genau das beschreibt).

Gruß, Dennis