str_shuffle und zufälligkeit

Vor einiger Zeit habe ich einen Zufallsgenerator geschrieben, der mithilfe des Zeichens mt_rand () eine Zeichenfolge erstellt, bis die gewünschte Länge erreicht ist.

public function getPassword ()
{
    if ($this -> password == '')
    {
        $pw             = '';
        $charListEnd    = strlen (static::CHARLIST) - 1;
        for ($loops = mt_rand ($this -> min, $this -> max); $loops > 0; $loops--)
        {
            $pw .= substr (static::CHARLIST, mt_rand (0, $charListEnd), 1);
        }
        $this -> password   = $pw;
    }
    return $this -> password;
}

(CHARLIST ist eine Klassenkonstante, die einen Zeichenpool für das Kennwort enthält. $ Min und $ max sind Längenbeschränkungen.)

Heute bin ich bei meinen Recherchen auf folgenden Code gestoßen:

function generateRandomString ($length = 10) {    
    return substr(str_shuffle ("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length);
}

Dies bewirkt so ziemlich den gleichen Effekt wie das Schleifen von mt_rand () -basiertem Code in einer Zeile. Ich mag es wirklich aus diesem einfachen Grund, weniger Codezeilen sind immer eine gute Sache. :)

Aber als ich str_shuffle im PHP-Handbuch nachgeschlagen habe, war die Dokumentation ziemlich leicht. Eine Sache, die ich unbedingt lernen wollte, war, welchen Algorithmus er für die Zufälligkeit verwendet. Im Handbuch wird nicht erwähnt, welche Art der Zufallsgenerierung durchgeführt wird, um die gemischte Zeichenfolge zu erhalten. Wenn rand () anstelle von mt_rand () verwendet wird, ist es möglicherweise besser, an meiner aktuellen Lösung festzuhalten.

Grundsätzlich würde ich gerne wissen, wie str_shuffle den String zufällig sortiert. Verwenden Sie rand () oder mt_rand ()? Ich benutze meine Zufallszeichenfolgenfunktion, um Passwörter zu generieren, daher ist die Qualität der Zufälligkeit von Bedeutung.

AKTUALISIEREN: Wie bereits erwähnt, entspricht die str_shuffle-Methode nicht dem Code, den ich bereits verwende, und ist weniger zufällig, da die Zeichen der Zeichenfolge mit der Eingabe identisch bleiben, nur wenn ihre Reihenfolge geändert wird. Ich bin jedoch immer noch gespannt, wie die Funktion str_shuffle die Eingabezeichenfolge zufällig sortiert.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage