public static function ssha512($password, $hash = null)
{
$marker = '{SSHA512}';
if ($hash == null) {
// encrypt
$salt = '';
for ($i = 0; $i < 4; $i++) {
$salt .= chr(mt_rand(0, 255));
}
$digest = hash('sha512', $password . $salt, true);
return $marker . base64_encode($digest . $salt);
} else {
// verify
if (!substr($hash, 0, strlen($marker)) == $marker) {
Error::raise(_t('Invalid hash'));
return false;
}
$hash = substr($hash, strlen($marker));
$hash = base64_decode($hash);
$digest = substr($hash, 0, 64);
$salt = substr($hash, 64);
return hash('sha512', $password . $salt, true) == $digest;
}
}