Hallo,
Mein Gedanke war, dass ich alle Zeichen verwenden möchte und nicht "nur" 16 - das erhöht die Kombinationsmöglichkeiten bei einer Länge von 32 Zeichen von 16^32 auf 62^32 (nur 0-9, a-z, A-Z).
md5() generiert einen 128-Bit Hash, sprich dies sind über 10^38 Möglichkeiten.
Selbst wenn jmd. 1 Mrd. Rechner hat, die jede Sekunde 1 Mrd. Kombinationen testen würden, bräuchte er 10^20 Sekunden oder 10^13 (10 Billionen!) Jahre um alle Kombinationen auszuprobieren.
Ich weiß zwar nicht welche Fortschritte die Medizin in den nächsten Jahren macht, aber ich bezweifel stark nicht einmal meine Ur-Ur-Ur-Ur-Ur-Ur-Enkel dieses noch miterleben werden.
Aber es wird noch Unsinnger:
md5(mt_rand());
mt_rand() hat wie gesagt, einen Wertebereich von 0 bis 2,1 Mrd., demzufolge kann es auch nur 2,1 Mrd. Hashwerte geben.
Wenn ich also 1 Computer habe der 20 Mio. Werte pro Sekunde testet (ein doch schon sehr veralteter Wert) würde ich nicht einmal 2 Minuten brauchen, um alle Kombinationen durchzurechenn.
Selbst wenn du nun alle Zeichen verwendest (0-9, a-z, A-Z), hast du weiterhin nur diese 2,1 Mrd. Kombinationen wenn du mt_rand() als Ausgangswert verwendest.
Selbst das mehrmahlige Anwenden von mt_rand() bringt dich nicht
weiter.
Dieser Zufallsgenerator basiert auf einem Algorithmus der einen Startwert erhählt und ausgehend davon Zufallszahlen generiert.
Dieser Startwert ist allerdings eine uint-Variable und somit gibt es maximal nur 2^32 (oder 4 Mrd.) Kombinationen.
Du kannst also soviele Zeichen wie du willst verwenden und einen solangen 'Zufallsstring' erzeugen wie du willst, es gibt nuneinmal maximal nur 4 Mrd. Kombinationen.
Deine 62^32 ist also absolut überflüssig, du bleibst bei 4 Mrd. Kombinationen, egal was du anstellst.
Abhilfe schaffen hier kryptographisch sichere Zufallsgeneratoren, leider lassen sich diese nur sehr schlecht unter PHP initialisieren.
Das Beste ist es also, wenn du Leserechte auf /dev/urandom hast, so bekommst sehr gute Zufallszahlen.
Hat man solche Rechte nicht, wird es recht schwer mittels PHP an gute Zufallszahlen zu kommen.
Man sollte einen Hash von möglich vielen variablen Werten erstellen, u.A. mircotime, memory_get_usage, memory_get_peak_usage, getmypid und vielleicht Informationen über den User wie z.B. IP, Herkunft, Browser-Kennung (User-Agent) etc.
Wobei sich die Frage stellt, ob du wirklich soviele Kombinationen brauchst, denn oftmals sind 2, bzw. 4 Mrd. Werte ausreichend.
MFG