in reply to encryption confusion

Salt is to make the pre-calculation of a dictionary of password hashes unfeasable. Without salt any user using the same password would get the same hash, the blackhats run a dictionary through crypt and then it is a simple lookup to find the password coresponding to a hash.

when you add a variable salt to each users crypt then two users using the same password will get different hashes. (One problem with NTs passwords was related to using a fixed system wide salt allowing a passcraker to check a dictionary against all users on one machine with one pass through the crypt, see l0phtcrack).

The perl crypt function gives you back the salt as the first two bytes of the hash so you can test a password by passing the current hash as the salt. Here is a password checking example stolen from perldoc.

if (crypt($password, $hash) ne $hash) { die "Sorry...\n"; } else { print "ok\n"; }
Cheers,
Random