PHPでパスワードをハッシュしてチェックする方法の例を見つけました。これは安全ですか?エミュレートするのは良い例ですか?
public function hashPassword($mail, $password, $salt, $rounds='08')
{
$length = strlen($password) * 4;
$data = str_pad($password, $length, sha1($mail), STR_PAD_BOTH);
$string = hash_hmac('whirlpool', $data, SERVER_KEY, true);
return crypt($string, '$2a$' . $rounds . '$' . $salt);
}
public static function checkPassword($mail, $password, $stored)
{
$length = strlen($password) * 4;
$data = str_pad($password, $length, sha1($mail), STR_PAD_BOTH);
$string = hash_hmac ('whirlpool', $data, SERVER_KEY, true);
return (crypt($string, substr($stored, 0, 30)) === $stored);
}