Random PHP?

...komplette Frage anzeigen

4 Antworten



1<?php
2/*
3 * @param integer  $length
4 * @param boolean  $capitals
5 * @param boolean  $specialSigns
6 *
7 * @return string
8 */
9  function CreatePassword($length = 7, $capitals = true, $specialSigns = true)
10  {
11    $array array();
12 
13 
14    if($length < 8)
15      $length = mt_rand(8,20);
16 
17    # Zahlen
18    for($i=48;$i<58;$i++)
19      $array[] = chr($i);
20 
21    # kleine Buchstaben
22    for($i=97;$i<=122;$i++)
23      $array[] = chr($i);
24 
25    # Großbuchstaben
26    if($capitals )
27      for($i=65;$i<=90;$i++)
28        $array[] = chr($i);
29 
30    # Sonderzeichen:
31    if($specialSigns)
32    {
33      for($i=33;$i<47;$i++)
34        $array[] = chr($i);
35      for($i=59;$i<64;$i++)
36        $array[] = chr($i);
37      for($i=91;$i<96;$i++)
38        $array[] = chr($i);
39      for($i=123;$i<126;$i++)
40        $array[] = chr($i);
41    }
42 
43    mt_srand((double)microtime()*1000000);
44    $passwort '';
45 
46    for ($i=1; $i<=$length$i++)
47    {
48      $rnd = mt_rand( 0, count($array)-1 );
49      $passwort .= $array[$rnd];
50    }
51 
52    return $passwort;
53  }
54?>

http://timkunze.eu/passwort-generator-mit-php/

(oder Syscall machen und APG verwenden)

Und ich würde unter Linux /dev/urandom oder /dev/random als Seed benutzen und nicht die Zeit. 

Antwort bewerten Vielen Dank für Deine Bewertung

Vielleicht so:

<?php

$PASS_CHARS = str_split('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');

function passgen($len=16) {
global $PASS_CHARS;

$buf = '';
for ($i = 0; $i < $len; ++$i) {
$buf .= $PASS_CHARS[array_rand($PASS_CHARS)];
}

return $buf;
}

for ($i = 0; $i < 8; ++$i) {
echo 'Pass #' . $i . ': ' . passgen(16) . "\\\\n";
}

Das liefert dann z. B. folgende Ausgabe:

Pass #0: tck3zxwzc57WL3uz
Pass #1: oFelFEybUlBMexsZ
Pass #2: DaxgGLF31KloOz6L
Pass #3: PJm54oqLO8eICSdy
Pass #4: lgfGMjU9ngEwm9bA
Pass #5: HwzUF3qy7t3xl0ss
Pass #6: VIgAcy9oOi3DntL2
Pass #7: fdVuQgvoLNBRUoTi

Allerdings sind globale Variablen äußerst unschön, und du solltest das ganze vielleicht sauber in einer Klasse kapseln!

Naja, viel Spaß damit! :)

PS: Allerhand Schnickschnack wie eine Prüfung auf Mindestlänge und die Verwendung von mt_rand() habe jetzt mal bei Seite gelassen. Darum musst du dich letzendlich natürlich selber kümmern! :)

Beachte dazu bitte UNBEDINGT den ersten Kommentar auf dieser Seite:

http://php.net/manual/de/function.array-rand.php

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?