I appreciate how it is done on *nix. It seemed appropriate to KISS in this case. Oh, all right I was just too lazy to offer more detail. Here is a half decent implementation that uses pseudorandom salts.....
sub crypt_pass {
my ( $pass ) = @_;
my @chars = ( 'A'..'Z','a'..'z',0..9,'.','/' );
my $salt = $chars[rand(64)].$chars[rand(64)];
return crypt( $pass, $salt );
}
sub check_pass {
my ( $pass, $hashed ) = @_;
my $salt = substr $hashed, 0, 2; # salt is first two chars of has
+h string
return crypt( $pass, $salt ) eq $hashed ? 1 : 0;
}
for(1..10) {
my $crypted = crypt_pass( 'japh' );
printf "%s\t%d\t%d\n", $crypted,
check_pass( 'japh', $crypted ), check_pass( '!japh', $crypted
+);
}
__DATA__
MUNh4wMD2XmEM 1 0
3mGrf7lP7OtZc 1 0
oK7ccq5AtY1xI 1 0
.yrauX5ySsKTc 1 0
zW39UkBxi2jPo 1 0
jEzvJ.irRskvo 1 0
fz54UpRw0TZWc 1 0
a0NMpS2IufmzQ 1 0
wLjbdTPPxpwd. 1 0
WeMtUMzGuNWoc 1 0
|