summaryrefslogtreecommitdiff
path: root/sha1pass
blob: 76193f16d890a2a7c0fd6957fe61a5a1016bc40a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/usr/bin/perl

use bytes;
use Digest::SHA1;
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;

$salt = $salt || MIME::Base64::encode(random_bytes(6), '');
$pass = Digest::SHA1::sha1_base64($salt, $pass);

print '$4$', $salt, '$', $pass, "\$\n";