PHPBuilder - Generating Pronounceable Passwords



RSS Twitter
Articles Tricks And Hacks

Generating Pronounceable Passwords

by: Jess Castagnetto
|
July 30, 2000

The problem
Just today (1999/04/29), someone asked in the PHPBuilder discussion boards if there was a way to generate random but pronounceable passwords. I guess something like the ubiquitous passwords you find in each of the AOL CD-ROMs that litter our mailboxes :)
In this article we will show how to do just that, with the constrains that we do not want to have number containing words in your output, and that we want to be able to specify the length of the words used.
The simplest way I could think to accomplish this would be to:
  1. Have a set of words (maybe in an array)
  2. Select the number of words to use in the password
  3. Pick the words and concatenate them
In the listing below, we will read a list of words from a file into an array, and then use the random functions in PHP to generate the password.
List 1: a simple pronounceable password generator

<?php

/* 
 * Pronounceable password generator
 * version 1.0beta
 * Inspired by a question made by: georgcantor_at_geocities.com
 * in the PHPBuilder discussion forum
 * (c) Jesus M. Castagnetto, 1999
 * GPL'd code, see www.fsf.org for more info
 */ 

$words =  "mywords";     /* the file w/ the words */ 
$cut_off 5;     /* minimum number of letters in each word */ 
$min_pass 2;     /* minimum number of words in password */ 
$max_pass 3;     /* maximum number of words in password */ 

/* read the external file into an array */ 
$fp fopen($words"r");

if (!
fp) {
    echo  
"[ERROR]: Could not open file $words<BR>\n";
    exit;
} else {
    
/* assuming words of up to 127 characters */ 
    
while(!feof($fp)) {
        
$tword trim(fgets($fp,128));
     
        
/* check for minimum length and for exclusion of numbers */ 
        
if ((strlen($tword) >= $cut_off) && !ereg"[0-9]",$tword)) {
            
$word[] = strtolower($tword);
        }
    }
    
fclose($fp);
}

/* generate the password */ 

$size_word count($word);
srand((double)microtime()*1000000);
$n_words rand($min_pass,$max_pass);

/* use the Mersenne Twister for a better random */ 
#mt_srand((double)microtime()*1000000); 
#$n_words = mt_rand($min_pass,$max_pass); 

for ($i=0$i $n_words$i++) {
    
$pass .= $word[rand(0,($size_word 1))] .  "_";
}

/* print the password */ 
echo substr($pass,0,-1). "<BR>\n";

?>
If you run the program listed above, the output would be (for example):

addressograph_accessible_adapt_acrid

1
|
2
|
3
Next Page »

Comment and Contribute

Your comment has been submitted and is pending approval.

Author:
Jess Castagnetto

Comment:



Comment:

(Maximum characters: 1200). You have characters left.