|
You last visited: Today at 21:20
Advertisement
[PHP] Random Pw-Gen
Discussion on [PHP] Random Pw-Gen within the Coding Snippets forum part of the Coding Releases category.
01/07/2014, 11:11
|
#1
|
elite*gold: 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== "") {
$maxPwLength= 10;
}
$count = 0;
$password = "";
while(($count < $maxPwLength) && (strlen($possibleChars ) > 0)) {
$count ++;
$character = substr($possibleChars, mt_rand(0, strlen($possibleChars )-1), 1);
$possibleChars = str_replace($character, "", $possibleChars );
$password .= $character;
}
return $password;
}
|
|
|
01/10/2014, 12:06
|
#2
|
elite*gold: 4
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.
|
|
|
01/10/2014, 12:25
|
#3
|
elite*gold: 0
Join Date: Jan 2010
Posts: 13,150
Received Thanks: 3,206
|
Quote:
Originally Posted by Else
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.
|
|
|
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) == 0 ? 10 : $maxPwLength);
einbauen, falls mal ein nicht-Integer übergeben wird oder die 0 übergeben wird.
mfg
|
|
|
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 )); }
|
|
|
05/25/2014, 14:23
|
#6
|
elite*gold: 0
Join Date: May 2014
Posts: 6
Received Thanks: 3
|
Quote:
Originally Posted by 0xDnFx3
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.
|
|
|
05/25/2014, 17:02
|
#7
|
elite*gold: 0
Join Date: Jan 2010
Posts: 13,150
Received Thanks: 3,206
|
Quote:
Originally Posted by CookieBone
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.
|
|
|
05/26/2014, 01:12
|
#8
|
elite*gold: 0
Join Date: Jan 2012
Posts: 759
Received Thanks: 416
|
Quote:
Originally Posted by Ravenstorm
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.
|
|
|
05/26/2014, 01:30
|
#9
|
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
|
Quote:
Originally Posted by Ravenstorm
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 );
|
|
|
05/26/2014, 08:46
|
#10
|
elite*gold: 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== "") { $maxPwLength= 10; }
$count = 0; $password = "";
while($count < $maxPwLength) { $count ++; $character = substr($possibleChars, mt_rand(0, strlen($possibleChars )-1), 1); $password .= $character; }
return $password; }
Aber ja, meine Funktion hatte den selben "Fehler".
|
|
|
06/04/2014, 08:19
|
#11
|
elite*gold: 18
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( $string, mt_rand( 0, strlen( $string ) -1 ), 1 ); return $newpass; }
|
|
|
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.
|
|
|
06/04/2014, 13:31
|
#13
|
elite*gold: 0
Join Date: Jan 2010
Posts: 13,150
Received Thanks: 3,206
|
Quote:
Originally Posted by マルセル
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)
|
|
|
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.
|
|
|
06/04/2014, 13:37
|
#15
|
elite*gold: 18
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
|
|
|
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.
|
|