use Math::TrulyRandom; my $seed = truly_random_value(); srand($seed); my $randbytes = join("",map {int(rand(10))} (0..16)); my $challenge = join(".",time,$$,$randbytes); #### use Digest::MD5 qw(md5_base64); $digest = md5_base64($challenge.$password);