Zufällige Passwörter automatisch mit PHP generieren

Heute möchte ich euch eine Funktion verstellen, die automatisch sichere und eindeutige Passwörter generiert. Ich habe die Funktion 10 Millionen mal getestet, und nie (!) ist der gleiche Code herausgekommen.

Zum testen habe ich die Codes in eine .txt Datei geschrieben und danach mit einem Simplen php Script überprüft, ob 2 gleiche Passwörter in der php Datei stehen. Die .txt Datei hatte nach dem Test ca. 1 GB und in ihr standen 10 Millionen Passwörter! Aber keine 2 gleichen! Wenn das mal nichts ist! (ich weiß, Eigenlob stinkt :D ) Ich hatte die Funktion mit 8 Zeichen getestet.

Ok, hier mal die Funktion:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
function code($laenge = 8) {
$zeit = str_shuffle(microtime(true) * 10000);
$kl= str_shuffle("abcdefghijklmnopqrstuvwxyz-");
$gr = str_shuffle("ABCDEFGHIJKLMNOPQRSTUVWXYZ_");
$gesamt = str_shuffle($kl.$zeit.$gr);
$gesamt = str_shuffle($gesamt .$zeit. $gesamt);
$gesamt = str_shuffle($gesamt.$kl);
$gesamt = str_shuffle($zeit.$gesamt.$gr.$kl);
$anzahl = strlen($gesamt);
for($i=1; $i <= $laenge; ++$i) {
$zufall = mt_rand(0,$anzahl);
$code = str_shuffle($code.$gesamt[$zufall]);
}
return $code;
}
?>

Erklärung:

In der Zeile 3 bis 5 wird sichergestellt, das der Parameter $laenge korrekt übergeben wurde. Wenn nicht wird er einfach auf ’8′ gesetzt. In der Zeile 6 wird der aktuelle Unix-Timestamp mit Mikrosekunden ermittelt und in der Variable $zeit gespeichert. Die Funktion str_shuffle() mischt die Zeichenkette.
In der Zeile 7 werden in der Variable $kl (für klein) alle Buchstaben des Alphabets als Kleinbuchstaben und der Unterstrich gespeichert. In Zeile 8 werden die Großbuchstaben und der Bindestrich in der Variable $gr (für Groß) gespeichert.
In Zeile 9 – 12 werden die oben genannten Variablen nach belieben zusammengefügt und danach in der Variablen $gesamt gespeichert.
In der Zeile 13 werden jetzt die Buchstaben gezählt und in der Variable $anzahl gespeichert.
Jetzt wird es interessant: Eine for-Schleife wählt einen Zufälligen Buchstaben aus der Variablen $gesamt aus. Dies geschieht, indem eine Zufallszahl mit mt_rand aus der Variable $anzahl, in der wir vorher bereits die Anzahl der Zeichen der Variable $gesamt gespeichert haben. Anschließend wird der fertige Code nochmal durchgemixt und dann zurückgegeben.

Die Funktion ruft man so auf:

1
2
3
4
<?php
$code = code(6);
echo $code; #z.B. Qso10l
?>

Die Zahl 6 kann natürlich durch jede andere Zahl ersetzt werden. Sie gibt die Länge des zurückgegebenen Codes an. Der fertige Code ist dann in der Variable $code gespeichert.

<pre escaped=”true” lang=”php” line=”1″><pre escaped=”true” lang=”php” line=”1″>

8 Kommentare zu “Zufällige Passwörter automatisch mit PHP generieren”

  1. avatar Mainboarder sagt:

    So sicher ist das leider nicht. Die Passwörter werden ja serverseitig produziert und dann versendet. Solange das nicht via https passiert ist der Vorgang ungeschützt.
    Besser ist es, wenn man es via JavaScript macht, denn dann werden die Passwörter vom eigenen Rechner generiert.
    Einen entsprechenden Code könnte man hier finden:
    http://www.kostenlose-javascripts.de/javascripts/verschiedenes/passwortgenerator.html

  2. avatar Johannes sagt:

    sehr viel einfacher ist das mit MD5 zu gestalten:

    substr (md5(microtime()) , rand(0, 32-$length) , $length);

    damit kann man passwörter mit bis zu 32 stellen generieren, die aber nur sehr semizufällig sind.
    Das sollte aber für Passwörter für Foren usw ausreichen.

  3. avatar Renzio sagt:

    Noch sicherer geht das ganz mit nem Programm…
    aber das müsste man ja erstmal downloaden ^-^

    Ich denke ich bastele mit n https-Popup für zufällige Passwörter zu erstellen. Natürlich mit Trackback zu diesem Artikel und easy-web.tk.
    Bin ja kein Code-Dieb :D

  4. avatar Renzio sagt:

    Edit:
    Bei mir kommt irgendwie 12mal der selbe Buchstabe raus o.O
    Wie kann das sein?
    Ist die Funktion getestet?

    • Hast du was kaputt gemacht?

      Zum testen habe ich die Codes in eine .txt Datei geschrieben und danach mit einem Simplen php Script überprüft, ob 2 gleiche Passwörter in der php Datei stehen. Die .txt Datei hatte nach dem Test ca. 1 GB und in ihr standen 10 Millionen Passwörter! Aber keine 2 gleichen!

  5. avatar Renzio sagt:

    Nicht das ich wüsste.
    Eigentlich habe ich nur den Code in meine Datei kopiert.
    Den Script im Head und die Ausführung im Body.
    Ansonsten gabs da nochn hr und n paar CSS-Anweisungen

  6. avatar s_hansse sagt:

    In diesem Script wurde vergessen, die Variable $zahl zu setzen.
    Ich kenn zwar den ursprünglichen Wert nicht, habe sie für mich aber mal auf 10 gesetzt.

    gruß

    s_hansse

Kommentar schreiben

RSS Feed Auf Twitter folgen!