Hi,
> $middle_part = str_shuffle($special_part); // Mische Sonderzeichen >
> // Erstelle das Passwort ohne Sonderzeichen am Anfang und Ende
> $password = str_shuffle($password_core);
> $password = substr($password, 0, $length - strlen($middle_part)) . $middle_part;
jetzt stehen die "Sonderzeichen" (die sich in $middle_part befinden), am Ende.
// Mische das gesamte Passwort $password = str_shuffle($password);
und jetzt mischst Du das ganze durch. Also zufällige Reihenfolge. Und damit können die "Sonderzeichen" auch am Anfang oder Ende auftauchen.
// Schneide auf die gewünschte Länge return substr($password, 0, $length);
die Länge müßte schon vorher richtig gewesen sein (siehe die Zeile, wo Du den $middle_part anhängst. Das substr müßte also überflüssig sein.
Gibt es dabei etwas auszusetzen oder geht es besser oder sinnvoller?
Warum sollte das Paßwort keines der "Sonderzeichen" am Anfang oder Ende haben?
Du mischst die einzelnen Zeichenkategorien durch, und entnimmst dann einen Teilstring. D.h. es kann kein Zeichen doppelt vorkommen. Das ist eine ziemliche Einschränkung der Zufälligkeit des Gesamtkonstrukts.
Kann sein, daß es noch mehr Probleme gibt, aber mehr Analyse mag ich jetzt nicht machen.
cu,
Andreas a/k/a MudGuard