]> git.proxmox.com Git - pve-access-control.git/commitdiff
encrypt_pw: avoid '+' for crypt salt
authorDietmar Maurer <dietmar@proxmox.com>
Thu, 30 Mar 2017 06:53:12 +0000 (08:53 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Thu, 30 Mar 2017 06:53:12 +0000 (08:53 +0200)
And make salt less predictable.

PVE/Auth/Plugin.pm

index 6b0298c45f8a8dd56b4cf439117681596ccac254..3356f691c55d1b5ff8bc3e1b5c5a54e63ac57a8e 100755 (executable)
@@ -130,11 +130,18 @@ sub parse_tfa_config {
     return $res;
 }
 
+my $salt_starter = time();
+
 sub encrypt_pw {
     my ($pw) = @_;
 
-    my $time = substr(Digest::SHA::sha1_base64 (time), 0, 8);
-    return crypt(encode("utf8", $pw), "\$5\$$time\$");
+    $salt_starter++;
+    my $salt = substr(Digest::SHA::sha1_base64(time() + $salt_starter + $$), 0, 8);
+
+    # crypt does not want '+' in salt (see 'man crypt')
+    $salt =~ s/\+/X/g;
+
+    return crypt(encode("utf8", $pw), "\$5\$$salt\$");
 }
 
 my $defaultData = {