Passwort generieren
Tom
- php
0 donroca0 Bio0 uepselon0 romy0 lulu0 Dankeschön!
Tom0 Thomas Schmieder0 toby0 ...nochmal Danke!
Tom
Moin,
ich möchte für User, die sich neu anmelden, ein Passwort generieren und ihnen das dann per E-Mail zuschicken (bzw. einen Link, in dem Username und Passwort bereits enthalten ist).
Meine Frage ist nun, wie ich z.B. ein Passwort bekomme, das sowohl Zahlen als auch Buchstaben enthält. Mit rand() z.B. bekomme ich ja nur Zahlen.
Was anderes ist noch, wie ich das Passwort dann in der DB (MySQL)speichere. Einfach als Text oder sollte man das irgendwie verschlüsseln?
Schon mal Danke,
Tom
Hallo Tom,
Was das Verschluesseln anbetrifft, ist MD5 dein Freund, da sowohl PHP als auch MySQL damit umgehen koennen.
Trag zunaechst dein Passwort in MySQL mit password('geheimesWort') ein. In deiner PHP-MySQL-Query schreibst du SELECT ....... password('geheimesWort').. und fertig. In diesem Fall koennen Deine User Ihr Passwort auch selbst generieren und sich in drei Wochen noch dran erinnern...
Dieter
Sup!
Meine Frage ist nun, wie ich z.B. ein Passwort bekomme, das sowohl Zahlen als auch Buchstaben enthält. Mit rand() z.B. bekomme ich ja nur Zahlen.
Vielleicht gibt es in PHP Funktionen, die Zahlen in Buchstaben umwandeln? Und Schleifen?
Was anderes ist noch, wie ich das Passwort dann in der DB (MySQL)speichere. Einfach als Text oder sollte man das irgendwie verschlüsseln?
Verschlüssel wäre nicht schlecht, vielleicht gibt es ja sowas wie crypt oder MD5 in PHP.
Gruesse,
Bio
Hallo,
http://aktuell.de.selfhtml.org/artikel/gedanken/passwort/index.htm#a0
Ein netter Artikel mit Beispiel Code.
Zum verschlüsseln in PHP einfach: $verschl_passwd = md5($passwort); verwenden.
Gruß,
ueps
HI,
Meine Frage ist nun, wie ich z.B. ein Passwort bekomme, das sowohl Zahlen als auch Buchstaben enthält. Mit rand() z.B. bekomme ich ja nur Zahlen.
ja aber, wenn Du ein array hast mit den Buchstaben a la
$array=('A','B') usw.
kannst Du mit der Zufallszahl von rand() einen dieser auswählen
das ganze in eine for-schleife gepackt und fertig
so in etwa: für 12-stelliges Passwort
for($i=0;$i<12;$i++) {
$bla = rand(count($array));
$pass .= $array[$bla];
}
ciao
romy
Huhu Tom
Meine Frage ist nun, wie ich z.B. ein Passwort bekomme, das sowohl Zahlen als auch Buchstaben enthält. Mit rand() z.B. bekomme ich ja nur Zahlen.
habe mal kurz in einer bekannten Suchmaschine nach "PHP password generate" gesucht und das hier gefunden:
http://aspn.activestate.com/ASPN/Cookbook/PHP/Recipe/164739
sieht ganz brauchbar aus, probier es halt mal aus.
Viele Grüße
lulu
Huhu
http://aspn.activestate.com/ASPN/Cookbook/PHP/Recipe/164739
sieht ganz brauchbar aus, probier es halt mal aus.
Nachdem ich mir das oben genannte Beispiel selbst mal näher angeschaut habe muss ich noch ergänzen, dass ich es nicht wirklich gelungen finde.
Z.B. werden zwar Sonderzeichen oder Ziffern zur Ausgangsmenge der zur Generierung zu verwendenden Zeichen hinzugefügt, aber nicht notwendigerweise auch ausgewählt.
Wenn der Autor also schreibt
" [...] make_password(8,5); would generate an 8 character password with upper case consonants and numbers. [...]"
müsste es eigentlich "could" an Stelle von "would" heissen, da nicht sichergestellt ist, dass auch tatsächlich Großbuchstaben oder Zahlen ausgewählt werden.
Des weiteren wird immer abwechselnd aus zwei Mengen von Zeichen ausgewählt.
Dadurch erhalten die erzeugten Passwörter eine gewisse Systematik und das ist natürlich Unsinn.
Die Verwendung einer Bit-Maske um hier Passwörter unterschiedlicher
"Güteklassen" zu erzeugen ist vielleicht auch etwas "oversized".
Viele Grüße
lulu
...,
gleich so viele Antworten - Danke! Ich glaube damit wären alle Klarheiten beseitigt ;-)
Tom
Hallo Tom,
da kann ich Dich doch nicht hängen lassen, oder?
<?PHP #### Zufallstexte erzeugen #############
function zufalls_Eintrag($lenmax)
{
mt_srand ((double)microtime()*1000000);
$anzahl = mt_rand(0,$lenmax);
$zeichen="abcdefghijklmnopqrstuvwxyzäöüßABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ 0123456789-+*_|&~.,?!";
$zufall="";
$i=0;
while($i<=$anzahl)
{
$zufall.=substr($zeichen,mt_rand(0,strlen($zeichen)),1);
$i++;
}
return $zufall;
}
?>
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo Thomas,
die Verwendung deutscher Sonderzeichen halte ich für problematisch.
Gruß
Eidgenosse
Hallo,
die Verwendung deutscher Sonderzeichen halte ich für problematisch.
mag sein. Ich habe das auch nicht für einen Passwort-Algorithmus geschrieben, sondern um mal eben schnell 100.000 Datensätze mit alphanumerischen Zufallswerten zu füllen, um dann Performance-Checks in MySQL (index, order, group by, usw...) durchführen zu können. Und das Eintippen war mir dann doch zu kompliziert.
Außerdem muss man die missliebigen Zeichen ja nur entfernen. Ich habs ja nicht fest verdrahtet.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo Thomas,
an Deiner Kompetenz hatte ich auch nicht gezweifelt. Aus eigener Erfahrung weiß ich jedoch, daß solche Code-Fragmente häufig ohne weitere Überarbeitung eingebaut werden. So war mein Posting lediglich als eine Empfehlung an Tom zu verstehen.
Gruß
Eidgenosse
Hi,
an Deiner Kompetenz hatte ich auch nicht gezweifelt. Aus eigener Erfahrung weiß ich jedoch, daß solche Code-Fragmente häufig ohne weitere Überarbeitung eingebaut werden. So war mein Posting lediglich als eine Empfehlung an Tom zu verstehen.
Das würde mir auch nix ausmachen, da ich ja genug Fehler veröffentliche. Wovon solltet Ihr sonst 'was lernen? *gnicker*
Ich finds gut, wenn einer konstruktive Kritik über. Ist nämlich besser, als zuzusehen, wie was den Bach runtergeht oder nur zu nörgeln.
Liebe Grüße aus http://www.braunschweig.de
Tom
finde ich zu aufwendig (mit 'e'), da kannste einfach md5 auf deine zufallszahl anwenden oder aber mit ascii arbeiten.
toby
Hallo toby,
finde ich zu aufwendig (mit 'e'), da kannste einfach md5 auf deine zufallszahl anwenden
Bei MD5 hast Du 16 Möglichkeiten pro Zeichen. Mit dem ganzen Alphabet, Groß- und Kleinschreibung und ein paar Sonderzeichen 72. Ein 8 Stellen langer MD5-Teilstring besitzt 16^8 = 4 * (1024)^3 = ca. 4 Mrd. Möglichkeiten Das ist durchaus innerhalb relativ kurzer Zeit (_sogar_ übers Web) zu knacken, vor allem, weil viele Benutzer ihr Passwort nicht ändern. Daher finde ich Toms Methode besser. Vielleicht bin ich in der Hinsicht auch etwas paranoisch. ;-)
Christian
srand((double)microtime()*1000000);
$temp = rand(0,1000000);
$start = rand(0,21);
$password = substr(md5($temp), $start, 8);
HTH
toby
...nochmal Hallo und nochmal Danke!
Hab jetzt mal eine Mischung aus Euren Vorschlägen gemacht:
<?php
mt_srand ((double)microtime()*1000000);
$letters="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$password="";
for($i=0;$i<8;$i++)
{
$password.=substr($letters,mt_rand(0,strlen($letters)-1),1);
}
echo $password;
?>
Tom