#!/usr/bin/perl -w ######################################################################## use strict; use Tie::File; use Fcntl 'O_RDONLY'; use Digest::MD5 qw(md5_hex); use Data::Dumper; print Dumper(random_password()),"\n" foreach 0..4; exit(0); sub random_password { my @punct= qw/ ; : + = % $ ! . /; my $retval={}; my $word1 = select_a_word(); my $word2 = select_a_word(); my $plain_text= $word1 . $punct[rand($#punct)+1] . $word2; $retval->{plain_text}=$plain_text; $retval->{md5_hash} = md5_hex($plain_text); $retval->{crypt} = crypt($plain_text,pass_the_salt()); return $retval; } sub pass_the_salt { my @salt_lick = ( 'a'..'z' ); return $salt_lick[rand($#salt_lick)+1] . $salt_lick[rand($#salt_lick)+1]; } sub select_a_word { my @words=(); tie @words,"Tie::File","/usr/share/dict/linux.words",mode=>O_RDONLY or die $!; my $word = $words[rand($#words)]; $word =~ tr /A-Z/a-z/; untie @words; if (length($word) > 6 ) { return select_a_word(); } eles { return $word; } }