http://qs321.pair.com?node_id=255336


in reply to Shadow Passwords

Howdy AM,
  crypt() in Perl encrypts a string exactly like crypt(3) in your C library. Consulting your crypt(3) manpage will probably show you that if crypt() is provided a salt that begins with the three characters '$1$' followed by at most 8 characters, it will use an MD5-based algorigth.

Changing your code to:
my @chars = ('a'..'z', 'A'..'Z', 0..9); my $password = do {{ local $_ = join "" => map {$chars [rand @chars]} 1..8; redo unless /[a-z]/ && /[A-Z]/ && /\d/; $_; }}; my $salt = '$1$' . join '', ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[ map { int rand 64 } 0 .. 7 ]; my $encrypted_pass = crypt($password, $salt);
should result in an MD5 passwd (depending on your systems crypt(3), of course).

Hope that helps,

-- dug