blob: 3404f1d663acc23a9b0560443a89079a86cff717 [file] [log] [blame]
Greg Hartman76d05dc2016-11-23 15:51:27 -08001#!/usr/bin/perl
2
3use bytes;
4use Crypt::PasswdMD5;
5use MIME::Base64;
6
7sub random_bytes($) {
8 my($n) = @_;
9 my($v, $i);
10
11 if ( open(RANDOM, '<', '/dev/random') ||
12 open(RANDOM, '<', '/dev/urandom') ) {
13 read(RANDOM, $v, $n);
14 } else {
15 # No real RNG available...
16 srand($$ ^ time);
17 $v = '';
18 for ( $i = 0 ; $i < $n ; $i++ ) {
19 $v .= ord(int(rand() * 256));
20 }
21 }
22
23 return $v;
24}
25
26
27($pass, $salt) = @ARGV;
28
29unless (defined($salt)) {
30 $salt = MIME::Base64::encode(random_bytes(6), '');
31 $salt =~ tr/\+/./; # . not +
32}
33
34print unix_md5_crypt($pass, $salt), "\n";