Moin,
du könntest mit rand()
Besser ist hier mt_rand(), ausserdem sollte das mt_srand() (bzw. srand() wenn du unbedingt rand() benutzen willst) nicht vergessen werden wenn du ein PHP kleiner 4.2 einsetzt, in der Doku steht mehr darüber.
Zahlen ausgeben lassen und die dann mit md5()
Dran denken dass die Ausgaben von md5() nur ein beschränktes Alphabet haben, ein damit erzeugtes Passwort muss also tendenziell länger sein als eines mit dem vollen Buchstabenumfang um die selbe Sicherheit zu erreichen.
Du kannst statt rand() auch time()
Ganz schlechte Idee. time() liefert wie der Name sagt immer die aktuelle Uhrzeit und die ist in höchstem Maße voraussagbar. Wenn man allein eine grobe Ahnung hat wann das Passwort damit erzeugt wurde, kann man in Windeseile alle Möglichkeiten durchprobieren. In einem Jahr erzeugt time() beispielsweise nur 31.557.600 verschiedene Werte, aber es gibt allein 308.915.776 Passwörter die nur aus 6 Kleinbuchstaben bestehen, und so ein Passwort wäre schon höchst unsicher gewählt.
Zur weiteren Vorgehensweise: Ich würde mir ja einen String nehmen in den ich alle in Frage kommenden Zeichen packe und dann mit Hilfe von mt_rand() zufällige Zeichen daraussuchen.
Ein Beispiel (der seed-Code stammt aus der Doku):
<?php
function make_seed() {
list($usec, $sec) = explode(' ', microtime());
return (float) $sec + ((float) $usec * 100000);
}
mt_srand(make_seed());
$pass = "";
$zeichen = "abcdefghijklmnopqrstuvwxyz".
"ABCDEFGHIJKLMNOPQRSTUVWXYZ".
"0123456789,.-;:_öäüÖÄÜ+*# ".
"'!"§$%&/()=?ß\@~µ{[]}²³°<>|";
for($i=0; $i < 8; $i++) $pass .= $zeichen[mt_rand(0,strlen($zeichen))];
echo $pass;
?>
Den Inhalt von $zeichen solltest du deinen Wünschen anpassen, ich hab' einfach mal alles reingepackt was auf meiner Tastatur so rumlag. Dran denken, dass " und \ mit einem \ escaped werden müssen.
Henryk Plötz
Grüße aus Berlin