PHPBuilder - Generating Pronounceable Passwords Page 2



RSS Twitter
Articles Tricks And Hacks

Generating Pronounceable Passwords - Page 2

by: Jess Castagnetto
|
July 30, 2000

I used the first 300 lines of the /usr/dict/words file in my Solaris box and save them into the file mywords, you can use any list of words you would like. Also, if you desire to have a better random generator, use the Mersenne Twister functions (see the manual entries for mt_rand() and mt_srand() for their description and links to more information).

Creating a function

Of course, we can make all of this into a function that you can drop in your scripts:
List 2: function ppassgen()

<?php

/*
 * Pronounceable password generator
 * version 1.0 - made into a function
 * 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
 */


/*
 * function ppassgen()
 * parameters:
 * $words = the name of the file w/ the words (one per line)
 *      or and array of words
 * $min = the minimum number of words per password
 * $max = the maximum number of words per password
 * $cutoff = the minimum number of characters per word
 * $sep = separator for the words in the password
 */

function ppassgen($words"mywords"$min=2$max=4$cutoff=5$sep"_") {

    if(
is_array($words)) {
        
/* if we have passed and array of words, use it */
        
$word_arr =  "words";
         
/*
        while(list($k,$v) = each(${$word_arr})) {
            echo "$k $v<BR>";
        }
        */
    
} else {
        
/* 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 */
            
$word_arr =  "ext_arr";
            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)) {
                    
$ext_arr[] = strtolower($tword);
                }
            }
            
fclose($fp);
        }
    }

    
/* size of array of words */
    
$size_word_arr count(${$word_arr});

    
/* generate the password */
    
srand((double)microtime()*1000000);

    
/* or use the Mersenne Twister functions */
    //mt_srand((double)microtime()*1000000);

    /* for a password of a fixed word number, min = max */
    
$n_words = ($min == $max)? $min rand($min,$max);

    
/* or use the Mersenne Twister for a better random */
    //$n_words = ($min == $max)? $min : mt_rand($min,$max);

    
for ($i=0$i<$n_words$i++) {
        
$pass .= ${$word_arr}[rand(0,($size_word_arr 1))] . $sep;
    }
    
/* return the password minus the last separator */
    
return substr($pass,0,-1*strlen($sep));
}


/* test the function */

/* generate 10 passwords using the default */
for ($j=0$j 10$j++) {
    echo 
ppassgen() .  "<BR>\n";
}

/* change some paramaters and use our own separator */
echo  "<HR>\n";
echo 
ppassgen"mywords",3,4,7"**") .  "<BR>\n";

/* give our own array to the function and generate a 2 word password */
$nwords = array( "cat""mouse""dog""house""surfboard""kirima");
echo 
ppassgen($nwords,2,2,3) . "<BR>\n";

?>

« Previous Page
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.