[PHP] Passwortgenerator

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Smokers, 22. Mai 2007 .

  1. 22. Mai 2007
    Passwortgenerator

    Also ich sehe das Problem.
    In jedem durchlauf der Schleife wird ein kleinbuchstabe ein Großbuchstabe und ne Zahl rangehängt anstatt in jedem durchlauf nur eine.
    Aber wie bekomme ich das behoben?
    Ich will ja schließlich das ENTWEDER nen kleiner Buchstabe ODER nen Großbuchstabe ODER ne zahl genommen wird.
    ^^

    THX schonmal.

    PHP:
    <?
    $stellen  $_POST [ 'stellen' ];
    $char1    $_POST [ 'char1' ];
    $char2    $_POST [ 'char2' ];
    $char3    $_POST [ 'char3' ];

    if(
    $stellen  50 ) {  $stellen = 50 $bemerkung = "<i> " . $stellen . " Stellen reichen für den Anfang und für jeden Hacker ;-)" ; }

    $kleinbuchstaben =array( "a" , "b" , "c" , "d" , "e" , "f" , "g" , "h" , "i" , "j" , "k" , "l" , "m" , "n" , "o" , "p" , "q" , "r" , "s" , "t" , "u" , "v" , "w" , "x" , "y" , "z" );
    $grossbuchstaben =array( "A" , "B" , "C" , "D" , "E" , "F" , "G" , "H" , "I" , "J" , "K" , "L" , "M" , "N" , "O" , "P" , "Q" , "R" , "S" , "T" , "U" , "V" , "W" , "X" , "Y" , "Z" );

    $zahlen =array( "0" , "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" );
    //$Sonderzeichen=array("!",""","§","$","%","&",")","(","=","?","#","+","-","*",";");

    $password = "" ;
    srand  ((double) microtime ()* 1645832 );

    while (
    $f  $stellen )
    {
    if (
    $char1 == 1 ) {  $password .= $kleinbuchstaben [ rand ( 0 , 26 )]; }
    if (
    $char2 == 1 ) {  $password .= $grossbuchstaben [ rand ( 0 , 26 )]; }
    if (
    $char3 == 1 ) {  $password .= $zahlen [ rand ( 0 , 10 )]; }
    $f ++;
    }
    $md5  md5 ( $password )
    ?>


    <html>
    <form action="<?php  print  $_SERVER [ 'PHP_SELF' ];  ?>" method="post">
    <input name="stellen" type="text" id="stellen">Anzahl der Stellen <br>
    <input type="checkbox" name="char1" value="1" checked="checked" > Kleinbuchstaben <br>
    <input type="checkbox" name="char2" value="1" checked="checked" > Großbuchstaben <br>
    <input type="checkbox" name="char3" value="1" checked="checked" > Zahlen <br>
    <input type="submit" name="submit" value="Generieren">
    <br><br><br>
    <?
    if(empty( $password )) {

    echo 
    "Kein Passwort generiert<br><br>" ;
    }
    else {
    echo 
    "Dein generiertes Passwort lautet:&nbsp;&nbsp;&nbsp; <b>"  $password  "</b><br><br>" ;
    echo 
    "Der MD5 Hash beträgt:&nbsp;&nbsp;&nbsp; <b>"  $md5  "</b><br><br>" ;
    echo 
    $bemerkung ;

    }
    ?>

    </form>
    </html>
     
  2. 22. Mai 2007
    AW: Passwortgenerator

    also die schleife soll so aussehen:

    schleife anfang {
    zahl oder großbuchstabe oder kleinbuchstabe -> wiederholen bis iwas false is
    }

    ?
     
  3. 22. Mai 2007
    AW: Passwortgenerator

    im Prinziep ja.....

    allerdings muss in der schleife untergebracht werden das WENN die checkbox3 z.B: nicht gewählt ist das dann KEINE zahlen einthalten sein dürfen.
    Wenn Checkbox2 nicht gewählt ist dann keine Großbuchstaben... etc.
    }
    Hoffe ich drück mich nicht zu unklar aus ^^°°
     
  4. 22. Mai 2007
    AW: Passwortgenerator

    ohne den code genauer anzuschauen: mach ein dicken array, beginnend mit kleinbuchstaben, dann große, dann zahlen, dann sonderzeichen. je nach wahl des benutzers lässt du dann während des generiens nur die array-indizes zu, die für die gewählten zeichen gültig sind.

    ich glaub, man könnte das elegant mit regexes lösen... ich setz mich mal nachher dran, wenn ich langeweile hab
     
  5. 22. Mai 2007
    AW: Passwortgenerator

    boing und seine regexe ....

    Also ich hab mal eben dirty was in das php feld geschrieben, hab aber das auswahl feld für kleinbuchstaben weggenommen, da ich es für sinnvoll halte dass der user nicht alles abwählen kann und die kleinbuchstaben als fallback in meiner lösung dienen.

    PHP:
    <?
    $stellen   $_POST [ 'stellen' ];

    if(
    $stellen  50 ) {
        
    $stellen    50 ;
        
    $bemerkung  '<i>50</i> Stellen reichen für den Anfang und für jeden Hacker ;-)' ;
    }

    $kleinbuchstaben  = array( "a" , "b" , "c" , "d" , "e" , "f" , "g" , "h" , "i" , "j" , "k" , "l" , "m" , "n" , "o" , "p" , "q" , "r" , "s" , "t" , "u" , "v" , "w" , "x" , "y" , "z" );
    $zahlen           = array( "0" , "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" );
    //$Sonderzeichen = array("!",""","§","$","%","&",")","(","=","?","#","+","-","*",";");

    srand  ( microtime ()* 1645832 );

    for (
    $i  0 ; $i  $stellen ; $i ++) {
        if ( (!(
    $i  3 )) && (!empty( $_POST [ 'char2' ])) ) {
            
    $password  .=  strtoupper ( $kleinbuchstaben [ array_rand ( $kleinbuchstaben )]);
        } elseif ( (!(
    $i  2 )) && (!empty( $_POST [ 'char3' ])) ) {
            
    $password  .=  $zahlen [ array_rand ( $zahlen )];
        } else {
            
    $password  .=  $kleinbuchstaben [ array_rand ( $kleinbuchstaben )];
        }
    }

    ?>


    <html>
    <form action="<?php  print  $_SERVER [ 'PHP_SELF' ];  ?>" method="post">
    <input name="stellen" type="text" id="stellen">Anzahl der Stellen <br>
    <input type="checkbox" name="char2" value="1" checked="checked" > Großbuchstaben <br>
    <input type="checkbox" name="char3" value="1" checked="checked" > Zahlen <br>
    <input type="submit" name="submit" value="Generieren">
    <br><br><br>
    <?
    if(empty( $password )) {
        echo 
    "Kein Passwort generiert<br><br>" ;
    }
    else {
        echo 
    "Dein generiertes Passwort lautet:&nbsp;&nbsp;&nbsp; <b> { $password } </b><br><br>" ;
        echo 
    'Der MD5 Hash lautet:&nbsp;&nbsp;&nbsp; <b>' . md5 ( $password ). '</b><br><br>' ;
    @    echo 
    $bemerkung ;
    }
    ?>
    </form>
    </html>
    Hoffe das hilft schon etwas weiter, der Algo ist jetzt zwar nicht so regelmäßig wie du oben verlangt hast, aber ist denke ich das was du suchst!

    PS: Du musst ein bißchen an deinem HTML arbeiten.
     
  6. 22. Mai 2007
    AW: Passwortgenerator

    tjo und ich komm mit sowas daher...

    PHP:
    ...
    //erstelle abfrage
    $bed  = array();
    if(
    $char1  != "" $bed [] =  "k" ;
    if(
    $char2  != "" $bed [] =  "g" ;
    if(
    $char3  != "" $bed [] =  "z" ;

    //keine abfrage angegeben?
    if( $bed [ 0 ] == "" $abort  true ;

    while(
    $f < $stellen ) {
        if(
    $abort  !==  true ) {
                 if(
    in_array ( "k" $bed ) &&  in_array ( "g" $bed ) &&  in_array ( "z" $bed )) {
                 
    //k,g,z
                 
    }
                 else {
                         if(
    in_array ( "k" $bed ) &&  in_array ( "g" $bed )) {
                         
    //k,g
                         
    }
                         elseif(
    in_array ( "k" $bed ) &&  in_array ( "z" $bed )) {
                         
    //k,z
                         
    }
                         elseif(
    in_array ( "g" $bed ) &&  in_array ( "z" $bed )) {
                         
    //g,z
                         
    }
                         else{
                                 if(
    $bed [ 0 ] ==  "k" ) {
                                 
    //k
                                 
    }
                                 elseif(
    $bed [ 0 ] ==  "g" ) {
                                 
    //g
                                 
    }
                                 else {
                                 
    //z
                                 
    }
                         }
                 }
                 
    $f ++;
             }
             else 
    $f  $stellen ;
    }
    ...
    haben eben nur grob drüber nachgedacht

    ps: älerbätsch meins frisst am meißten ressourcen!
     
  7. 22. Mai 2007
    AW: Passwortgenerator

    PHP:
    <?
    $stellen  $_POST [ 'stellen' ];
    $chr  $_POST [ 'chr' ];

    if(
    $stellen  50 ) {  $stellen = 50 $bemerkung = "<i> " . $stellen . " Stellen reichen für den Anfang und für jeden Hacker ;-)" ; }

    $kleinbuchstaben =array( "a" , "b" , "c" , "d" , "e" , "f" , "g" , "h" , "i" , "j" , "k" , "l" , "m" , "n" , "o" , "p" , "q" , "r" , "s" , "t" , "u" , "v" , "w" , "x" , "y" , "z" );
    $grossbuchstaben =array( "A" , "B" , "C" , "D" , "E" , "F" , "G" , "H" , "I" , "J" , "K" , "L" , "M" , "N" , "O" , "P" , "Q" , "R" , "S" , "T" , "U" , "V" , "W" , "X" , "Y" , "Z" );

    $zahlen =array( "0" , "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" );
    //$Sonderzeichen=array("!",""","§","$","%","&",")","(","=","?","#","+","-","*",";");
    $kbgbz  = array( "0" , "0" , "0" );

    srand  ((double) microtime ()* 1645832 );

    while (
    $anz  !=  $stellen )
    {
        
    $kbgbz [ rand ( 0 , 2 )] =  1 ;

        if (
    $chr [ 0 ] &&  $kbgbz [ 0 ]) {
                 
    $password .= $kleinbuchstaben [ rand ( 0 , 26 )];
                 
    $kbgbz [ 0 ] =  0 ;
        }elseif (
    $chr [ 1 ] &&  $kbgbz [ 1 ]) {
                 
    $password .= $grossbuchstaben [ rand ( 0 , 26 )];
                 
    $kbgbz [ 1 ] =  0 ;
        }elseif (
    $chr [ 2 ] &&  $kbgbz [ 2 ]) {
                 
    $password .= $zahlen [ rand ( 0 , 10 )];
                 
    $kbgbz [ 2 ] =  0 ;
        }

        
    $anz  strlen ( $password );

    }
    $md5  md5 ( $password )
    ?>


    <html>
    <form action="<?php  print  $_SERVER [ 'PHP_SELF' ];  ?>" method="post">
    <input name="stellen" type="text" id="stellen">Anzahl der Stellen <br>
    <input type="checkbox" name="chr[0]" value="1" checked="checked" > Kleinbuchstaben <br>
    <input type="checkbox" name="chr[1]" value="1" checked="checked" > Großbuchstaben <br>
    <input type="checkbox" name="chr[2]" value="1" checked="checked" > Zahlen <br>
    <input type="submit" name="submit" value="Generieren">
    <br><br><br>
    <?
    if(empty( $password )) {

    echo 
    "Kein Passwort generiert<br><br>" ;
    }
    else {
    echo 
    "Dein generiertes Passwort lautet:&nbsp;&nbsp;&nbsp; <b>"  $password  "</b><br><br>" ;
    echo 
    "Der MD5 Hash beträgt:&nbsp;&nbsp;&nbsp; <b>"  $md5  "</b><br><br>" ;
    echo 
    $bemerkung ;

    }
    ?>
    </form>
    </html>
    habs so gemacht, klappt ganz gut und ist denk ich das was du dir vorgetsellt hast?( .

    mfg

    PS: der rot markierte text sind jene code teile die ich deinem ausgangscode hinzugefügt habe:] !

    //EDIT: da fehlt noch was...das hier klappt nur wenn man das passwort mit klein-großbuchstaben + zahlen generiert!!(erweiter das gleich)

    //EDIT2: so jetzt sollte es klappen is ned ganz sauber aber es funzt !
     
  8. 22. Mai 2007
    AW: Passwortgenerator

    boah .. ich fang gerade heue an mit PHP .. und ihr ballert mich mit regexen array blabliblubb zu ...
    ROFL

    xD

    oh man .. ich schau mir das gleich mal an alles. so.. ^^°°


    \\\\\\\\
    Das von MakenX funzt schonmal wunderbar...
    ich teste das andere trotzdem mal..

    BW habta alle ^^

    \\\\\\\\\\\\\\

    Ich weis... ich müsste mehr XHTML draus machen... aber als ich HTM gelernt hab .. das schon so ewig her ^^°.. naja ma kiecken
     
  9. 22. Mai 2007
    AW: Passwortgenerator

    Hier mal eine Idee, bei der man nicht alle Buchstaben einzeln in ein Array schreiben muss
    PHP:
    <? php
        error_reporting
    ( E_ALL );
        
    $stellen = 5 ;
        
    $bereiche  = array( 0 ,array( 48 , 57 ),array( 65 , 90 ),array( 97 , 122 ),array( 32 , 126 ));
        
    srand ((double) microtime ()* 1000000 );
        
    $psw  "" ;
        for(
    $i = 0 ; $i < $stellen ; $i ++) {
            
    $bereich  rand ( 1 , 4 );
            if(!isset(
    $_request [ 'check' . $bereich ]))  $i --;
            else 
    $psw .= chr ( rand ( $bereiche [ $bereich ][ 0 ], $bereiche [ $bereich ][ 1 ]));
        }
        echo 
    "Passwort lautet: " . $psw ;
    ?>
    P.S.
    Ascii Table - ASCII character codes and html, octal, hex and decimal chart conversion
     
  10. 22. Mai 2007
    AW: Passwortgenerator

    Stimmt würde ich in Delphi auch nicht anders machen.
    Nicht jeden Buchstaben einzeln sondern als Bereich...
    man man man..

    PHP:
    $bereiche  = array( 0 ,array( 48 , 57 ),array( 65 , 90 ),array( 97 , 122 ),array( 32 , 126 )); 
    is das nen Array im array im array im array??? WTF

    und was bedeuten eigentlich immer die : " rand ( 1 , 4 ) " beiden Ziffern im Rand?Ist das von bis?
     
  11. 22. Mai 2007
    AW: Passwortgenerator

    Hehe ^^
    Musste da auch an meine ersten Informatikstunden denken.

    Ach, ist ja nur ein zweidimensionales Array => Wie ein Schachbrett.

    So ist es:
    Code:
    int rand ( [ int min [, int max]] )
     
  12. 22. Mai 2007
    AW: Passwortgenerator

    jep array's kannste in php so oft verschachteln wie du lustig bist^^

    $array = array("1" => array("2" =>array("3" => array("4"))));

    rand(von, bis);
     
  13. 22. Mai 2007
    AW: Passwortgenerator

    Nein kann man nciht so oft verschachteln wie man lustig ist, je nach PHP Einstellung ist irgendwann zu Ende ... @Smoker php.net/funktionsname hilft fast immer also, wenn du nächstes mal etwas nicht weißt einfach selber so nachschauen!
     
  14. 22. Mai 2007
    AW: Passwortgenerator

    Naja ne array kannte ich schon .. keine Bange. schon von Delphi.
    Allerdings ist da irgendwann sense mit verschachteln bzw die übersict geht extrem verloren.
    Mehrdimensionale Arrys gibts in Delphi auch

    (man kann algemein viele Parallelen ziehen zwischen programmiersprachen ^^ ) von daher..

    naja danke jungs
    BW is raus...


    S
     
  15. 23. Mai 2007
    AW: Passwortgenerator

    danke für's re-öffnen, hier mal meine version... ohne array. regex machen in meinen augen doch keinen sinn

    PHP:
    <? php  if( $_POST [ 'action' ]== "generate" ) {

        
    $sum  $_POST [ 'a-z' ] +  $_POST [ 'A-Z' ] +  $_POST [ '0-9' ] +  $_POST [ 'special' ];
        
    $chars  "" ;

        if(
    $sum  1 )
            
    $chars .=  "abcdefgihjklmnopqrstuvwxyz" ;
        if(
    $sum  2 )
            
    $chars .=  "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
        if(
    $sum  4 )
            
    $chars .=  "0123456789" ;
        if(
    $sum  8 )
            
    $chars .=  "#-_+" ;

        if(
    $chars ) {
            
    srand ((double) microtime ()* 100000 );
            
    $pw  "" ;
            for(
    $i = 0 $i <= $_POST [ 'length' ];  $i ++) {
                
    $pw .=  substr ( $chars , ( rand ()%( strlen ( $chars ))),  1 );  // modulo magic!!11eins :)
            
    }    
        } else
            
    $pw  "no chars selected. noob." ;
        
    }
        
    ?>        
    <html>

        <body>
            <form action="<?php  echo  $_SERVER [ 'PHP_SELF' ];  ?>" method="post" style="border: 1px solid black; background-color: #eeeeee; padding: 20px; width: 300px;">
                length: <input type="text" name="length" value="8" /><br />
                chars: <input type="checkbox" name="a-z" value="1">a-z&nbsp;&nbsp;&nbsp;
                         <input type="checkbox" name="A-Z" value="2">A-Z&nbsp;&nbsp;&nbsp;
                         <input type="checkbox" name="0-9" value="4">0-9&nbsp;&nbsp;&nbsp;
                         <input type="checkbox" name="special" value="8">special
                <br />
                <input type="hidden" name="action" value="generate" />
                <input type="submit" value="generate" />
            </form>
    <?php  if(isset( $pw )) {  ?>

            <div id="pwgen" style="border: 1px solid black; width: 300px; height: 80px; background-color: #eeeeee; padding: 5px;">
                password: <b><?php  echo  $pw ?></b>
            </div>
    <?php  ?>

        </body>
    </html>
    zum anfassen auf http://blubberlutschi7.freeweb7.com/pwgen.php
     
  16. 23. Mai 2007
    AW: Passwortgenerator

    @teh_boiiingerrr, sehr elgant gefällt mir am besten von allen hier geposteten scripts !!

    mfg
     
  17. 23. Mai 2007
    AW: Passwortgenerator

    Ja mir auch,
    eigentlich sehr einfach im Gegensatz zu denen die vorangegangen waren ^^
    Aber funktioniert einwandfrei und sogar mit style =P ^^

    THX nochmal .. insofern keine frägen oder so sind mach ich dann aber wieder zu ...

    S
     
  18. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.