Querdenkender Webworker mit WordPress-Affinität

Zufälliger String für Passwörter

Um halbwegs zufällige Strings für Passwörter zu erzeugen, braucht es eigentlich nicht viel. Allerdings muss dabei beachtet werden, dass eine programmerzeugte Zufallszahl eventuell garnicht so zufällig ist, wie es vielleicht gewünscht war. Allerdings lässt sich dieses Problem etwas minimieren, indem man einen Faktor mit einberechnet, der sich permanent verändert. Die Systemzeit ist dabei eine vielversprechende Unterstützung. Anwendungen, die über eine solche Funktion Passwörter erzeugen, sollen diese eventuell aus einem entsprechenden Zeichenvorrat erzeugen, weil angeschlossene Systeme dies entweder fordern oder weil vielleicht einmal zu oft, ein User sein Passwort einfach nicht erkannte, weil sich sich 0 und O beim Abschreiben zu ähnlich sind.

Mein Vorschlag für eine Funktion dieser Art ist folgender:

[code lang=“php“]
function simpleRandString ($len = 8, $list = ‚23456789ABCDEFGHJKMNPQRSTUVWXYZ‘) {
$str = “;
if (is_numeric ($len) && !empty ($list)) {
mt_srand ((double) microtime () * 1000000);
while (strlen ($str) < $len) {
$str .= $list[mt_rand (0, strlen ($list)-1)];
}
}
return $str;
}
[/code]

Ruft man diese Funktion ohne Parameter auf, wird eine zufällige Zeichenkette, die 8 Zeichen lang ist, aus dem Vorrat von $list erzeugt. Genausogut kann man auch längere oder kürzere Strings erzeugen, indem man $len beim Aufruf der Funktion angibt. Die Funktion prüft allerdings auf einen numerischen Wert. Außerdem besteht die Möglichkeit, ganz beliebige Zeichen als Vorrat zu verwenden, indem man $list eine andere Zeichenkette übergibt. Allerdings gilt auch hier, dass $list nicht leer sein darf, da sonst nur eine leere Zeichenkette zurückgeliefert wird.

Have fun!

Das könnte Dich auch interessieren:

Kommentare

  1. Thomas meint:

    1.) Seit PHP 4.2.0 ist es nicht mehr nötig, den Zufallszahlengenerator zu initialisieren, bevor man ihn benutzt.
    => d.h. mt_rand() ist überflüssig aber schaden kann es nicht
    2.) ein ständiges Abfragen der länge der erzeugten Zeichenkette bedeutet den laufzeit-tot für dieses Script!
    3.) für Zufallszahlen in diesem kleinen Werte-Bereich (d.h. [0 … 255]) ist die Funktion besser da schneller!
    Besser:
    function simpleRandString ($len = 8, $list = ‚23456789ABCDEFGHJKMNPQRSTUVWXYZ‘)
    {
    $str = “;
    $listmax = (strlen($list)-1);

    if ((($len+0)<1) || ($listmax<0)) return “;

    srand ((double)microtime()*1000000);

    for ($i=0; $i<$len; $i++ )
    {
    $str .= $list[ rand(0,$listmax) ];
    }
    return $str;
    }

Deine Meinung ist uns wichtig

*