Tom: Passwort generieren

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

  1. 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

  2. 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

    --
    Ich bin ein Mobber - mein Posting tut mir leid! EHRLICH!!!
  3. 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

  4. 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

    --
    DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
    ->Alles ist gut wenn es aus Schokolade ist
  5. 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

    --
    bythewaythewebsuxgoofflineandenjoytheday
    1. 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

      --
      bythewaythewebsuxgoofflineandenjoytheday
  6. ...,

    gleich so viele Antworten - Danke! Ich glaube damit wären alle Klarheiten beseitigt ;-)

    Tom

  7. 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

    --
    Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
    1. Hallo Thomas,

      die Verwendung deutscher Sonderzeichen halte ich für problematisch.

      Gruß

      Eidgenosse

      1. 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

        --
        Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
        1. 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

          1. 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

            --
            Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
    2. finde ich zu aufwendig (mit 'e'), da kannste einfach md5 auf deine zufallszahl anwenden oder aber mit ascii arbeiten.

      toby

      1. 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

        --
        Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.
  8. srand((double)microtime()*1000000);
    $temp = rand(0,1000000);
    $start = rand(0,21);
    $password = substr(md5($temp), $start, 8);

    HTH

    toby

  9. ...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