В настоящее время я внедряю систему входа в систему. Я хочу сохранить пароль и соль в базе данных. Теперь я узнал, что есть функции hash()
и crypt()
, которые, кажется, делают то же самое (, что и для SHA512 ).
hash()
новее и, кажется, поддерживает больше алгоритмов хеширования, чем crypt()
. Или есть какие-то другие различия, о которых я должен знать/заботиться?
Редактировать:
function generatePasswordHash($password){
$salt = base64_encode(mcrypt_create_iv(8));
$calculatedPasswordHash = crypt($password, '$1$'. $salt. '$');
return $calculatedPasswordHash;
}
Результат выглядит так$1$Qh6ByGJ9$zLn3yq62egvmc9D7SzA2u.
Вот моя функция проверки пароля:
function checkLoginData($username, $password){
global $db;
$sql = "SELECT * FROM users WHERE username = :username";
$result = $db->ExecuteQuery($sql, array("username"=>$username));
if(!empty($result)){
$result = $result[0];
$savedPasswordHash = $result['password'];
$splitted = explode("$", $savedPasswordHash);
$salt = $splitted[2];
$calculatedPasswordHash = crypt($password, '$1$'. $salt. '$');
if($savedPasswordHash === $calculatedPasswordHash){
return true;
}
}
return false;
}