35 lines
587 B
Perl
Executable File
35 lines
587 B
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
use bytes;
|
|
use Crypt::PasswdMD5;
|
|
use MIME::Base64;
|
|
|
|
sub random_bytes($) {
|
|
my($n) = @_;
|
|
my($v, $i);
|
|
|
|
if ( open(RANDOM, '<', '/dev/random') ||
|
|
open(RANDOM, '<', '/dev/urandom') ) {
|
|
read(RANDOM, $v, $n);
|
|
} else {
|
|
# No real RNG available...
|
|
srand($$ ^ time);
|
|
$v = '';
|
|
for ( $i = 0 ; $i < $n ; $i++ ) {
|
|
$v .= ord(int(rand() * 256));
|
|
}
|
|
}
|
|
|
|
return $v;
|
|
}
|
|
|
|
|
|
($pass, $salt) = @ARGV;
|
|
|
|
unless (defined($salt)) {
|
|
$salt = MIME::Base64::encode(random_bytes(6), '');
|
|
$salt =~ tr/\+/./; # . not +
|
|
}
|
|
|
|
print unix_md5_crypt($pass, $salt), "\n";
|