96dpi

Andreas Levers / Fotografie und Bildbearbeitung

Silben

LockedFür eine FTP-Verwaltungssoftware brauchte ich eine Funktion, die in der Lage ist buchstabierbare Passwörter zu generieren. Ein Lösungsansatz ist die Verwendung von Silben, die zufällig aneinandergereiht leichter merkbare Passwörter ergeben. Weil keine echten Wörter bei der Erzeugung verwendet werden, dürfte die Anfälligkeit gegenüber Dictionary-Attacken gering sein.

Der Parameter $minlength legt die Länge des aus Silben generierten Teils fest. Wenn $casevariance= true übergeben wird, werden zufällig die Hälfte der Silben mit einem großen Konsonanten verwendet. Das Array $prefixes wählt zufällig eines der darin enthaltenen Elemente aus und fügt es vorne am Passwort hinzu.

Weitere Infos und Quelltext nach dem Klick.

PHP:
  1. <?php
  2.  
  3.     /**
  4.      * Pronouncable password generator
  5.      **/
  6.  
  7.     function pronouncablePassword ($minlength = 8, $casevariance = false, $prefixes = array()) {
  8.         $vowels         = array('a','e','i','o','u');
  9.         $consonants = array('a','b','c','d','f','g','h','j','k','l','m','n','p','qu','r','s','t','v','w','x','y','z');
  10.         $syllables  = array();
  11.         for ($c = 0; $c <count($consonants); $c++) {
  12.             for ($v = 0; $v <count($vowels); $v++) {
  13.                 if ($casevariance == true) {
  14.                     $consonants[$c] = (mt_rand(0,2)> 1) ? strtoupper($consonants[$c]) : strtolower($consonants[$c]);
  15.                 }
  16.                 $syllables[] = $consonants[$c] . $vowels[$v];
  17.             }
  18.         }
  19.         $password = '';
  20.         while (strlen($password) <$minlength) {
  21.             mt_srand((double)microtime()*1000000);
  22.             shuffle($syllables);
  23.             $password.=array_pop($syllables);
  24.         }
  25.        
  26.         $password = substr($password, 0, $minlength);
  27.         if (count($prefixes)> 0) {
  28.             mt_srand((double)microtime()*1000000);
  29.             shuffle($prefixes);
  30.             $password = array_pop($prefixes) . $password;
  31.         }
  32.         return $password;
  33.     }
  34.    
  35.    
  36.     echo pronouncablePassword(6, false) . "\n";
  37.     echo pronouncablePassword(8, true) . "\n";
  38.     echo pronouncablePassword(6, true, array('alpha', 'beta', 'gamma', 'super', 'kilo', 'micro')) . "\n";
  39.    
  40. ?>

Wie immer übernehme ich keine Verantwortung für den Quelltext und die mit seinem Einsatz verbundenen Risiken. Der Quelltext ist Public Domain, jeder kann damit machen, was er will. Denkbare Erweiterungen sind Suffixe und das Einstreuen von Zufallszahlen.

Kommentieren