Register for your free account! | Forgot your password?

You last visited: Today at 21:20

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[PHP] Random Pw-Gen

Discussion on [PHP] Random Pw-Gen within the Coding Snippets forum part of the Coding Releases category.

Reply
 
Old   #1

 
Ravenstorm's Avatar
 
elite*gold: 0
The Black Market: 100/0/0
Join Date: Jan 2010
Posts: 13,150
Received Thanks: 3,206
[PHP] Random Pw-Gen

Gehen wir von einem Passwort-Resett oder eine allgemeine Passwort-Vergabe bei einer neuen Registrierung. In beiden Fällen generieren wir ein Passwort und schicken es dem User. Hier eine Funktion für so eine Passwort-Generierung.

PHP Code:
    function rndPw($maxPwLength) {
        
$possibleChars "#0123456789+bBcCdDfFgGhHjJkKmMnNpPqQrRsStTvVwWxXyYzZ-";
         
        if(
$maxPwLength== "") {
            
$maxPwLength10;
        }

        
$count 0;
        
$password "";

        while((
$count $maxPwLength) && (strlen($possibleChars ) > 0)) {
            
$count ++;
            
$character substr($possibleCharsmt_rand(0strlen($possibleChars )-1), 1);
            
$possibleChars str_replace($character""$possibleChars );
            
$password .= $character;
        }

        return 
$password;
    } 
Ravenstorm is offline  
Thanks
4 Users
Old 01/10/2014, 12:06   #2


 
Else's Avatar
 
elite*gold: 4
The Black Market: 166/0/0
Join Date: Feb 2008
Posts: 3,854
Received Thanks: 1,268
Am Rande: Wäre es nicht viel einfacher mit einer einfachen for-Schleife? So ersparst du dir das hochzählen der Variable, die while-Schleife weniger zu gebrauche, für das vorhaben. ;-)

Mit der Abfrage der gegebenen Passwortlänge geht es weiter: völlig sinnlos. Als Alternative kannst Du als Standard eine Zeichenfolge von 10 angeben und dann nur zwischendurch überprüfen, ob der Wert gegeben ist oder nicht und dann mit der intval-Funktion drüber laufen.
Else is offline  
Old 01/10/2014, 12:25   #3

 
Ravenstorm's Avatar
 
elite*gold: 0
The Black Market: 100/0/0
Join Date: Jan 2010
Posts: 13,150
Received Thanks: 3,206
Quote:
Originally Posted by Else View Post
Am Rande: Wäre es nicht viel einfacher mit einer einfachen for-Schleife? So ersparst du dir das hochzählen der Variable, die while-Schleife weniger zu gebrauche, für das vorhaben. ;-)

Mit der Abfrage der gegebenen Passwortlänge geht es weiter: völlig sinnlos. Als Alternative kannst Du als Standard eine Zeichenfolge von 10 angeben und dann nur zwischendurch überprüfen, ob der Wert gegeben ist oder nicht und dann mit der intval-Funktion drüber laufen.
Zum ersten: Wäre weniger umständlich ja, aber rein prinzipiell kein großer Unterschied denn die Variablen-Inkrementierung nimmt in dem Fall vllt. 0,02 ms in Anspruch.


Zum zweiten: Mein Beispiel bezieht sich auf ein php-script welches ich in ein Typo3-Cms integriert habe in dem man eben auf die Registrierung ein rnd-pw erhällt genau wie auf den pw-reset. Allerdings befindet sich die Funktion in einen meiner Modellen also verwende ich sie häufiger oder? Genau. Nämlich noch an 6 weiteren Stellen für diverse anderen Funktionen in welchen sie als Basis dient und eben mit dem Übergabeparameter getrimmt oder erweitert werden kann.
Bsp. Für die Pws benötige ich 10 Stellen und gebe bei dem Aufruf nichts an. Bei der Token generierung für sie 1-Minute cookies welche ich generiere auf der Webseite benötige ich nur 5 dann folgen 3 andere Parameter und dann erfolgt ein erneuter Aufruf diesmal mit 9 Stellen. War ein Beispiel von den 6.

Und somit halte ich die Abfrage für Sinnvoll. Man könnte die Variable auch global setzten, was sich nicht lohnt und von dem ich in einem modell sofort abraten würde.
Ravenstorm is offline  
Thanks
1 User
Old 04/21/2014, 21:07   #4
 
elite*gold: 0
Join Date: Apr 2014
Posts: 18
Received Thanks: 3
Was Else sagt trifft schon zu.

So wie jetzt sollte die Fkt. ein 'Warning' und ein 'Notice' melden

Code:
Warning: Missing argument 1 for rndPw()
Notice: Undefined variable: maxPwLength
da kein 'Error' funktioniert sie zwar, ist aber nicht schön.

Eleganter wäre etwas wie
PHP Code:
function rndPw($maxPwLength=10){ ... } 
dann kann die Fkt. auch ohne Parameter aufgerufen werden.

Zusätzlich dazu kannst du noch was wie

PHP Code:
$maxPwLength = (intval($maxPwLength) == 10 $maxPwLength); 
einbauen, falls mal ein nicht-Integer übergeben wird oder die 0 übergeben wird.

mfg
M4xicaner is offline  
Old 05/25/2014, 03:40   #5
 
elite*gold: 0
Join Date: May 2014
Posts: 173
Received Thanks: 59
Ganz einfach:

Frage:
Warum immer while, for etc benutzen wenn man das ganze mit 2 Zeilen machen kann ?

PHP Code:
function getPassword($length 12)
{
    
$char_list '#0123456789+bBcCdDfFgGhHjJkKmMnNpPqQrRsStTvVwWxXyYzZ-';
    return (
substr(str_shuffle($char_list), 0$length ));

0xDnFx3 is offline  
Old 05/25/2014, 14:23   #6
 
elite*gold: 0
Join Date: May 2014
Posts: 6
Received Thanks: 3
Quote:
Originally Posted by 0xDnFx3 View Post
Frage:
Warum immer while, for etc benutzen wenn man das ganze mit 2 Zeilen machen kann ?
Weil dieses 2-Zeilen Snippet absoluter Müll ist. Ravenstorm hat schon ne ziemlich gute Lösung gepostet.
CookieBone is offline  
Old 05/25/2014, 17:02   #7

 
Ravenstorm's Avatar
 
elite*gold: 0
The Black Market: 100/0/0
Join Date: Jan 2010
Posts: 13,150
Received Thanks: 3,206
Quote:
Originally Posted by CookieBone View Post
Weil dieses 2-Zeilen Snippet absoluter Müll ist. Ravenstorm hat schon ne ziemlich gute Lösung gepostet.
Da muss ich dir zustimmen.

Die 2-Zeiler-Variante ist lediglich Müll den man im Internet postet um schlau zu wirken. Bei genauerem hinsehen wird klar, dass so etwas total ungeeignet für Passwörter oder generell für so gut wie alles ist.

Du hast aus einem String-Satz maximal jedes Zeichen 1 mal -> Useless.
Ravenstorm is offline  
Old 05/26/2014, 01:12   #8
 
elite*gold: 0
Join Date: Jan 2012
Posts: 759
Received Thanks: 416
Quote:
Originally Posted by Ravenstorm View Post
Da muss ich dir zustimmen.

Die 2-Zeiler-Variante ist lediglich Müll den man im Internet postet um schlau zu wirken. Bei genauerem hinsehen wird klar, dass so etwas total ungeeignet für Passwörter oder generell für so gut wie alles ist.

Du hast aus einem String-Satz maximal jedes Zeichen 1 mal -> Useless.
Der Code vom TE lässt aber auch jedes Zeichen nur einmal rein.
dowhile is offline  
Thanks
1 User
Old 05/26/2014, 01:30   #9

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
Quote:
Originally Posted by Ravenstorm View Post
Du hast aus einem String-Satz maximal jedes Zeichen 1 mal -> Useless.
Und was macht dein Code?

Code:
$character = substr($possibleChars, mt_rand(0, strlen($possibleChars )-1), 1);
$possibleChars = str_replace($character, "", $possibleChars );
snow is offline  
Thanks
1 User
Old 05/26/2014, 08:46   #10

 
Ravenstorm's Avatar
 
elite*gold: 0
The Black Market: 100/0/0
Join Date: Jan 2010
Posts: 13,150
Received Thanks: 3,206
Weil das ganze auch so schwer änderbar ist ->

PHP Code:
    function rndPw($maxPwLength) {
        
$possibleChars "#0123456789+bBcCdDfFgGhHjJkKmMnNpPqQrRsStTvVwWxXyYzZ-";
         
        if(
$maxPwLength== "") {
            
$maxPwLength10;
        }

        
$count 0;
        
$password "";

        while(
$count $maxPwLength) {
            
$count ++;
            
$character substr($possibleCharsmt_rand(0strlen($possibleChars )-1), 1);
            
$password .= $character;
        }

        return 
$password;
    } 
Aber ja, meine Funktion hatte den selben "Fehler".
Ravenstorm is offline  
Old 06/04/2014, 08:19   #11



 
Sedrika's Avatar
 
elite*gold: 18
The Black Market: 103/0/0
Join Date: Sep 2009
Posts: 20,174
Received Thanks: 14,475
Ich um die Zufallsrate zu verbessern solltest du wie hier mt_srand noch nutzen.
PHP Code:
        public function Generate$length 16 )
        {
            
$newpass '';
            
$string "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
            
mt_srand( (double)microtime() * 1000000 );
            for( 
$i 1$i <= $length$i++ )
                
$newpass .= substr$stringmt_rand0strlen$string ) -), );
            return 
$newpass;
        } 
Sedrika is offline  
Old 06/04/2014, 13:21   #12

 
elite*gold: 0
Join Date: May 2014
Posts: 91
Received Thanks: 28
Wo genau wäre das Problem, wenn jedes Zeichen nur einmal im Passwort vorkommt? Es ist nunmal ein zufallsgeneriertes Passwort, theoretisch ist der Zweizeiler schon "besser", sofern man keinen Wert darauf legt, welche Zeichen im Passwort wie oft vorkommen.
マルセル is offline  
Old 06/04/2014, 13:31   #13

 
Ravenstorm's Avatar
 
elite*gold: 0
The Black Market: 100/0/0
Join Date: Jan 2010
Posts: 13,150
Received Thanks: 3,206
Quote:
Originally Posted by マルセル View Post
Wo genau wäre das Problem, wenn jedes Zeichen nur einmal im Passwort vorkommt? Es ist nunmal ein zufallsgeneriertes Passwort, theoretisch ist der Zweizeiler schon "besser", sofern man keinen Wert darauf legt, welche Zeichen im Passwort wie oft vorkommen.
1. Begrenzte Passwortlänge
2. Unsicher (Brute-Forcebar)
Ravenstorm is offline  
Old 06/04/2014, 13:36   #14

 
elite*gold: 0
Join Date: May 2014
Posts: 91
Received Thanks: 28
Heutzutage ist mit der richtigen Maschine absolut alles bruteforcebar - Kauft man sich auch nur einen ansatzweise guten Server ist eine Passwortlänge von 16 Zeichen in maximal einigen Wochen erledigt - Dafür ist die Technik einfach zu stark heute. Und ein generiertes Passwort von >30 (?) Zeichen ist eh unnötig.
マルセル is offline  
Old 06/04/2014, 13:37   #15



 
Sedrika's Avatar
 
elite*gold: 18
The Black Market: 103/0/0
Join Date: Sep 2009
Posts: 20,174
Received Thanks: 14,475
Bei einem Passwort kommt es ja eher weniger an die Zeichen als auf die Länge an
Sedrika is offline  
Reply


Similar Threads Similar Threads
Random 2
09/17/2012 - WarRock - 4 Replies
Was kann dort rauskommen und für wieviele tage? Bei gamersfirst stan das ja immer dabei jetzt ja leider nichtmehr.
[SALE] Random ISRO chars in random servers CHEAP, from 1$ to 3$
06/03/2012 - Silkroad Online Trading - 4 Replies
Hello, I want to sell all those chars very cheap for PayPal money from 1$ to 3$ , because I need some money to buy usb joystick to play FIFA on pc ^^ If you buy them all, I can sell all those chars for 15$!!! Contacts - skype: myntex2 I ACCEPT PAYPAL ONLY So let's start:
random
05/23/2011 - Flyff Private Server - 3 Replies
Hello, does any one know how to add new faces in game instead of editing the old ones? and also how to add 30 day amp scrolls any tips would help alot thank you.
i put this here at random
04/22/2008 - Say Hello - 0 Replies
hi all. I really have nothing better to do, so hi



All times are GMT +2. The time now is 21:20.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.