Probier mal, das Leerzeichen vor abcdef... zu löschen
Hi,
ich hab eine kleine Funktion gebastelt, die ein zufälliges Passworte erstellt mit einer angegebenen Länge:
Wenn ich nun zum Beispiel die Länge "8" angebe, erstellt er mir ein Passwort mit 8 Zeichen. Allerdings nicht immer, manchmal sind es nur 7 oder 6.PHP-Code:function generatepw($lenght)
{
$pass = "";
$index = 1;
while ($index <= $lenght)
{
mt_srand((double)microtime()*1000000);
$random = mt_rand(0,61);
$pass .= substr("abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ0123456789", $random, 1);
$index++;
}
return $pass;
}
Kann man ganz einfach überprüfen:
Einige Passwört haben fehlende Zeichen ... hat jemand eine Ahnung, wieso? Danke!PHP-Code:$zahl=0;
while ($zahl <= 20)
{
echo generatepw(8); echo "<br>";
$zahl++;
}
“My software never has bugs. It just develops random features ...”
» DevShack - die Website des freien Webentwicklers Boris
Probier mal, das Leerzeichen vor abcdef... zu löschen
Wenn die Sonne der Kultur niedrig steht, werfen selbst Zwerge einen Schatten. (Karl Kraus)
Äh, da ist normalerweise keins - das hat das Forum hier gemacht![]()
“My software never has bugs. It just develops random features ...”
» DevShack - die Website des freien Webentwicklers Boris
Ok
dann mach mal
sollte funktionierenPHP-Code:$random = mt_rand(0,60);
Wenn die Sonne der Kultur niedrig steht, werfen selbst Zwerge einen Schatten. (Karl Kraus)
Oder Du lernst nochmal das Alphabet
In der Zeichenkette fehlen sowohl "w" als auch "W", dann müßte es auch wieder mt_rand(0,61) heißen
Wenn die Sonne der Kultur niedrig steht, werfen selbst Zwerge einen Schatten. (Karl Kraus)
Aaah, das wars ... danke *roll*![]()
“My software never has bugs. It just develops random features ...”
» DevShack - die Website des freien Webentwicklers Boris
...oder du verwendest das hier. Bewirkt genau das gleiche, indem es den aktuellen Timestamp in Millisekunden (microtime()) per MD5 verschlüsselt:
PHP-Code:function generateRandomString($length)
{
return substr(md5(microtime()),0, $length);
}
@seb
Habe ich bislang auch immer so gemacht, aber Stuck Mojo hat mich darauf gebracht, dass selbiges nicht der eleganteste Weg ist: Denn Du hast so keine Kontrolle über die verwendeten Zeichen und nicht alle derselbigen sind in Passwörtern wünschenswert (z.B. "I" und "l", Verwechselungsgefahr).![]()
Aus diesem Grund benutze ich meine Variante - eine 1 und ein l sehen sich auch recht ähnlich ... mit dieser Version kann man Zeichen auch bewusst "weglassen" ...
Man könnte allerdins auch die md5-Variante nehmen, mit einer RegExp alle I, l und 1 entfernen und dann auf acht Zeichen kürzen![]()
“My software never has bugs. It just develops random features ...”
» DevShack - die Website des freien Webentwicklers Boris
Das kann man in der Tat. Man kann sich aber auch ein Loch ins Knie bohren und heiße Milch draus trinken.Original geschrieben von Adagio
Man könnte allerdins auch die md5-Variante nehmen, mit einer RegExp alle I, l und 1 entfernen und dann auf acht Zeichen kürzen![]()
![]()
oder den String in Großbuchstaben zurückgeben. Der durschnittliche Computerbenutzer wird doch dazu fähig sein, eine 1 von einem I oder auch einem l zu unterscheiden...falls sein Passwort nicht funktioniert, wird ers merken und feststellen, worans liegt.
Aber falls man unbedingt Kontrolle über die verwendeten Zeichen haben möchte, habt ihr mit eurem Einwand natürlich vollkommen recht.
edit:
Noch ein Nachteil von meiner Lösung könnte sein, dass sie eventuell nicht dafür geeignet ist, mehrere Zufallsstrings kurz nacheinander zu erzeugen.
Sicher wird man sowas vielleicht nie brauchen, aber wenns doch mal vorkommt und der betreffende Computer entsprechend schnell ist , würde er gleiche Passwörter ausgeben, da microtime() ja keine Zufallszahl ist, und die Zeitabstände zwischen den Befehlsausführungen vielleicht kürzer als eine tausendstel Sekunde sein könnten...rein theoretisch...
Geändert von seb (15.08.2002 um 13:39 Uhr)
Nur mal als Info, da ich wiedermal an sowas dran binOriginal geschrieben von seb
oder den String in Großbuchstaben zurückgeben. Der durschnittliche Computerbenutzer wird doch dazu fähig sein, eine 1 von einem I oder auch einem l zu unterscheiden...falls sein Passwort nicht funktioniert, wird ers merken und feststellen, worans liegt.
Aber falls man unbedingt Kontrolle über die verwendeten Zeichen haben möchte, habt ihr mit eurem Einwand natürlich vollkommen recht.
Arial: I,1,l,O,0
Times New Roman: I,1,l,O,0
Courier: I,1,l,O,0
Cenury: I,1,l,O,0
...manches sieht sich doch sehr ähnlich... und ich kann aus Erfahrung sagen, dass es nicht so ist, dass der jenige es merkt, sondern eher eine Email schreibt, als an seinem Passwort rumzuprobieren.
Grussi Jan
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)