Here's one I wrote in PERL that generates easy to remember but still strong passwords.

It grabs three letter words from the UNIX file /usr/dict/words, combines them, mixes case and adds random characters in between the two words. That way they are simple, easy to remember and meet most password requirements on a Solaris system (must contain mix of characters, etc.)

Add salt to taste :)


#!/usr/local/bin/perl
#
END { print "\n"; }

srand( time + $$ );

@chars = qw ( ! @ # $ % ^ & * ( ) - = , . & < > ' : ;
              1 2 3 4 5 6 7 8 9 0  );
open( A, "/usr/dict/words" ) or die;
foreach( <A> ) {
    chomp;
    push @words, $_ if( /^[a-z]{3}$/i );
}

if( ! $ok ) {
    $word1 = $words[rand($#words)];
    $word2 = $words[rand($#words)];
    $char1 = $chars[rand($#chars)];
    $char2 = $chars[rand($#chars)];
    $ok++ if( ( $word1 ne $word2 ) && ( $char1 ne $char2 ) );
}

$tmp = $word1 . $char1 . $word2 . $char2;

@foo = split //, ( $word1 . $char1 . $word2 . $char2 );

for( $i = 0; $i < 3; $i++ ) {
  my $i = rand($#foo);
  $foo[$i] = uc $foo[$i];
}
foreach( @foo ) { print }