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";
 |