Академический Документы
Профессиональный Документы
Культура Документы
sub EncryptP{
my $password = $_[0];
my $setting = $_[1];
my @setting = split(//,$setting);
my $hash;
my $output = '*0';
$output = '*1' if substr($setting, 0, 2) eq $output;
return $output if substr($setting, 0, 3) ne $header;
my $count_log2 = index($itoa64, $setting[3]);
if ($count_log2 < 7 || $count_log2 > 30){
return $output;}
my $count = 1 << $count_log2;
my $salt = substr($setting, 4, 8);
return $output if length($salt) != 8;
if ($php_version >= '5') {
$hash = md5($salt . $password);
do {
$hash = md5($hash . $password);
} while (--$count);
} else {
$hash = pack('H*', md5_hex($salt . $password));
do {
$hash = pack('H*', md5_hex($hash . $password));
} while (--$count);
}
$output = substr($setting, 0, 12);
$output .= &b64($hash, 16);
return $output;
}
sub HashP{
my $password = $_[0];
my $salt = $_[1];
my $hash;
$hash = &EncryptP($password,$salt);
return $hash if length($hash) == 34;
}
sub CheckP{
my $password = $_[0];
my $stored_hash = $_[1];
my $hash = &EncryptP($password,$stored_hash);
return $hash;
}
sub finder{
my $password = $_[0];
my $salt = $_[1];
my $hash = $_[2];
my $output = &CheckP($password,&HashP($password,$salt));
return $output eq $salt.$hash;
}