Revision 9d4c2b6c
Von Moritz Bunkus vor fast 12 Jahren hinzugefügt
SL/Auth/Password.pm | ||
---|---|---|
use strict;
|
||
|
||
use Carp;
|
||
use Digest::MD5 ();
|
||
use Digest::SHA ();
|
||
|
||
sub hash {
|
||
my ($class, %params) = @_;
|
||
|
||
if (!$params{algorithm}) {
|
||
$params{algorithm} = 'SHA256S';
|
||
$params{fallback_algorithm} = 'MD5';
|
||
}
|
||
|
||
$params{algorithm} ||= 'SHA256S';
|
||
|
||
my $salt = $params{algorithm} =~ m/S$/ ? $params{login} : '';
|
||
|
||
if ($params{algorithm} =~ m/^SHA256/) {
|
||
if (eval { require Digest::SHA; 1 }) {
|
||
return '{' . $params{algorithm} . '}' . Digest::SHA::sha256_hex($salt . $params{password});
|
||
|
||
} elsif ($params{fallback_algorithm}) {
|
||
return $class->hash(%params, algorithm => $params{fallback_algorithm});
|
||
|
||
} else {
|
||
die 'Digest::SHA is not available';
|
||
}
|
||
return '{' . $params{algorithm} . '}' . Digest::SHA::sha256_hex($salt . $params{password});
|
||
|
||
} elsif ($params{algorithm} =~ m/^SHA1/) {
|
||
if (eval { require Digest::SHA; 1 }) {
|
||
return '{' . $params{algorithm} . '}' . Digest::SHA::sha1_hex($salt . $params{password});
|
||
|
||
} elsif (eval { require Digest::SHA1; 1 }) {
|
||
return '{' . $params{algorithm} . '}' . Digest::SHA1::sha1_hex($salt . $params{password});
|
||
|
||
} elsif ($params{fallback_algorithm}) {
|
||
return $class->hash(%params, algorithm => $params{fallback_algorithm});
|
||
|
||
} else {
|
||
die 'Neither Digest::SHA nor Digest::SHA1 is available';
|
||
}
|
||
return '{' . $params{algorithm} . '}' . Digest::SHA::sha1_hex($salt . $params{password});
|
||
|
||
} elsif ($params{algorithm} =~ m/^MD5/) {
|
||
require Digest::MD5;
|
||
return '{' . $params{algorithm} . '}' . Digest::MD5::md5_hex($salt . $params{password});
|
||
|
||
} elsif ($params{algorithm} eq 'CRYPT') {
|
Auch abrufbar als: Unified diff
Modul Digest::SHA1 auch nicht mehr als Fallback versuchen
Wird schlicht nicht mehr benötigt: Digest::SHA kam mit Perl 5.9.3 in
Core, und wir setzen 5.10.1 voraus.