Hallo,
mt_rand() erzeugt also 2,1 Mrd verschiedene Zahlen.
jo, die Funktion mt_getrandmax() die größte Zahl die mt_rand() zurückliefern kann.
Und die uint-Variable hat einen Wertebereich von 0-2^32.
Die zuständige uint-Variable belegt 32 Bit, womit eben 2^32 mögliche Kombinationen und somit ^32 mögliche Zahlen entstehen.
die man von /dev/urandom bekommt.
Aus /dev/urandom liest du keine Zahlen aus sondern bytes.
Du liest daraus (z.B. per fgets) 16 Bytes aus, jedes Byte kann einen Wert zwischen 0 und 255 haben womit dann 256^16 bzw. 2^128 mögliche Kombinationen entstehen.
Das Problem an den Zufallsgeneratoren die PHP anbietet ist, dass man diese nur mit einem uint-Wert initialisieren kann, welcher eben nur 2^32 mögl. Kombinationen hat und woraus folgt, dass es nur 2^32 mögl. Zufallsreihen gibt.
Sichere Zufallsgeneratoren arbeiten anders, ISAAC verwendet z.B. ein 256 elementiges int-Array zur Initialiserung des Zufallsgenerator.
Somit gibt es theoretisch 2^8192 Anfangswerte (statt 2^32) und somit auch (theoretisch) 2^8192 mögliche Zufallsreichen.
Ein Problem ist immer die Initialisierung von Zufallsgeneratoren. Oft sieht man ja den Ansatz:
mt_srand((double)microtime()*1000000);
Dies führt dazu, dass es maximal 1 Mio. Startwerte gibt, dort bringt es auch nichts wenn man theoretisch 2^8192 mögliche Startwerte hätte.
Deswegen verwendet man für die Initialisierung, die i.d.R. nur ein einziges mal pro Systemstart geschieht, sehr viele verschiedene variable Werte, wie z.B. welche Prozesse laufen, wieviel Speicher diese verwenden, welche User seit wann angemeldet sind, wann das System gestartet ist etc.
Sonst könnte man unter Linux /dev/urandom auch mittels /dev/random initialisieren.
/dev/random basiert, je nach Betriebssystem, auf einen echten Hardware-Zufallsgenerator der z.B. die Umgebungsgeräusche mit einbezieht.
Der Nachteil an /dev/random ist, dass dieser nicht beliebig lange Zufallsreichen produzieren kann, zur Initialisierung von /dev/urandom reicht dies aber vollkommen aus.
Lange Rede, kurzer Sinn:
/dev/urandom liefert (normalerweise) sehr sehr gute Zufallszahlen und kein PHP Zufallsgenerator kommt annähernd daran.
MFG