[PHP] Random Pw-Gen

06/04/2014 13:48 Ravenstorm#16
Wenn die Zeichenlänge begrenzt ist, dann ist auch die Passwort-Funktion nicht gut.

Es ist denke ich völlig klar, dass wenn jedes Zeichen nur einmal vorkommen kann es weniger Möglichkeiten für ein Passwort gibt, als wenn Buchstaben häufiger vorkommen.
Somit ist diese Aussage schonmal völlig irrelevant.

Und natürlich hängt das ganze auch so gut wie nur von der Länge ab.
06/04/2014 17:33 Shawak#17
Quote:
Originally Posted by Sedrika View Post
Bei einem Passwort kommt es ja eher weniger an die Zeichen als auf die Länge an ;)
Das stimmt so nicht ganz, nehmen wir mal an du hast das Grundalphabet und alle Zahlen das macht:
26 (Alphabet) * 2 (Da groß und klein) + 10 Zeichen (0-9) = 62 Zeichen

Ein Passwort mit einer Länge von 8 ergibt das:
62^8 ~= 2.183x10^14 Möglichkeiten

Nimmst du nun allerdings alle Sonderzeichen dazu, bist du bei 95 Zeichen.

Dann macht das bei 7 Zeichen
95^7 = 6.983x10^13 Möglichkeiten

.. und bei 8 Zeichen:
95^8 = 6.634x10^15 Möglichkeiten

Wie man sehen kann, gibt es bei dem sieben-stelligen Passwort mit Sonderzeichen im Vergleich zu dem mit acht Stellen zwar weniger Möglichkeiten. Allerdings musst du bedenken, dass bei einem Bruteforce versucht wird das Passwort zunächst ohne Sonderzeichen zu knacken, da die meisten Passwörter keine Sonderzeichen enthalten und der Angreifer davon ausgeht, dass es so schneller gehen würde (zumindest in den meisten Fällen). Dementsprechend ist ein Passwort mit sieben Stellen und Sonderzeichen sicherer als ein Passwort mit acht Stellen ohne Sonderzeichen.

Wenn man jetzt allerdings von einem ANSI Encoding ausgeht liegst du total daneben, da es bereits bei sieben Zeichen mit Sonderzeichen mehr Möglichkeiten gibt als bei acht Zeichen ohne Sonderzeichen:

Ohne Sonderzeichen: 62^8 = 2.183x10^14 Möglichkeiten
Mit Sonderzeichen: 190^7 = 8.939x10^15 Möglichkeiten

Und wenn man jetzt von einem Unicode Encoding ausgeht (was zwar etwas unrealistisch ist, aber möglich) , liegst du völlig daneben.

edit: swaggyboy hat das schon gut gemacht.

lg
Shawak
06/04/2014 17:56 Sedrika#18
Die Praxis sieht immer etwas anders aus als die Theorie.
Wer ein sicheres Passwort haben will der nimmt ein längeres, es kommt dabei begingt auf die Zeichen an, da ein BruteForce Programm das ganze durchlaufen muss und nicht willkürlich rumprobiert. Ein Passwort bestehend aus 128x 'a' wird von einem BruteForce sicherlich nicht in einigen Jahren geknackt. In so einem Fall wäre Menschenshand schneller wenn man das denn wüsste.
In gewisser weise liegen wir beide denke ich wohl richtig.
06/04/2014 19:13 Shawak#19
Quote:
Originally Posted by Sedrika View Post
Die Praxis sieht immer etwas anders aus als die Theorie.
In dieser Thematik eher weniger.

Quote:
Originally Posted by Sedrika View Post
Wer ein sicheres Passwort haben will der nimmt ein längeres, es kommt dabei begingt auf die Zeichen an, da ein BruteForce Programm das ganze durchlaufen muss und nicht willkürlich rumprobiert.
Es gibt meist vorgefertigte Listen die zuerst durchlaufen werden, am Besten einfach mal googeln.

Quote:
Originally Posted by Sedrika View Post
Ein Passwort bestehend aus 128x 'a' wird von einem BruteForce sicherlich nicht in einigen Jahren geknackt. In so einem Fall wäre Menschenshand schneller wenn man das denn wüsste.
Siehe oben, ich gehe davon aus, dass dieses Passwort innerhalb weniger Sekunden geknackt wäre.

Quote:
Originally Posted by Sedrika View Post
In gewisser weise liegen wir beide denke ich wohl richtig.
Das denke ich allerdings eher nicht.

Bitte hör auf dein Unwissen hier zu verbreiten, danke.

lg
06/04/2014 20:04 マルセル#20
128x 'a' wäre sogar innerhalb einer Millisekunde geknackt, da dies das erste getestete Passwort wäre. Bei einem sagen wir mal "ordentlichem" Bruteforce-Programm wäre bei einer festen eingetragenen Länge von 128 die große Anzahl von 'a' definitiv das erste, denn zuerst würde 'aaaa.....aaaa' kommen und danach erst 'aaaa.....aaab' - Sprich das Passwort wäre definitiv das erste.
09/03/2014 18:26 .aNNdii##21
PHP Code:
function randomPassword($iPasswordLength 10$bSingleCharacter false$sAvailableCharacter '#0123456789+bBcCdDfFgGhHjJkKmMnNpPqQrRsStTvVwWxXyYzZ-') {
    
$sRandomPassword '';
    
    for(
$i 0;$i $iPasswordLength$i++) {
        
$sCharacter $sAvailableCharacter[mt_rand(0strlen($sAvailableCharacter) - 1)];
        
$sRandomPassword .= $sCharacter;
        
        if(
$bSingleCharacter) {
            
$sAvailableCharacter str_replace($sCharacter''$sAvailableCharacter);
        }
    }
    
    return 
$sRandomPassword;

:p hab mal deine Version etwas überarbeitet.
Natürlich könnte man noch einbauen, dass keine 0 auf ein O folgt oder kein m auf ein n, aber das ist euch überlassen.
09/18/2014 01:20 .StarSplash#22
Ob aus einem gegebenem Eingabealphabet Elemente doppelt vorkommen oder nicht spielt in der Praxis tatsächlich kaum eine Rolle, wenn das Passwort ausreichend lang ist.

Hast du ein Passwort der Länge n und Eingabealphabet derselben länge, entspricht die Anzahl der Möglichen Permutationen genau n!.

Für n = 2 ergibt sich folglich:
2! = 2*1 Mögliche Permutationen, {1,2} und {2,1}

Für n = 3 sind es:
3! = 3*2*1 Permutationen, {1,2,3}, {1,3,2}, {2,1,3}, {2,3,1}, {3,1,2}, {3,2,1}


Wenn du dem Nutzer das Passwort ohnehin zuschickst, ist es ja grundsätzlich egal wie lang es ist.

Es würde schon reichen, wenn dich bei dem Passwort auf das Alphabet mit Kleinbuchstaben beschränkst.
Dann kämst du auf 26! = 403291461126605635584000000 oder 4,033 x^26 Permutationen.

Da die Intention ja ein vorübergehendes Passwort ist, bis der User ein neues Festgelegt hat, ist also auch mit dem Zweizeiler von vorher alles in Ordnung.


26 Buchstaben kann man sich wohl ebenso wenig merken wie 10 beliebige Zeichen.