Соли хранятся неправильно в базе данных.
Моя тестовая функция:
<?php
include_once("core/init.php");
$admin = new Admin();
$name = "akhil";
$password = "daydreamers";
$salt = Hash::salt(24);
$hash = Hash::make($password,$salt);
/*echo $hash;
echo "<br/>";*/
$admin->newAdmin($name,$hash,$salt);
$dsalt = $admin->getSalt($name);
if($salt != $dsalt){
echo "Wrong";
}
/*echo Hash::make($password,$dsalt);
echo "<br/>";
//$admin->verify($name,$password);
echo $admin->getPassword($name);*/
?>
Класс хеша:
<?php
class Hash{
public static function make($string,$salt=''){
return hash('sha256', $string . $salt);
}
public static function salt($length){
return mcrypt_create_iv($length, MCRYPT_DEV_URANDOM);
}
}
?>
Соль, которую я храню, и соль, полученная из базы данных, не совпадают. Я просмотрел другие посты, которые, кажется, предлагают увеличить размер столбца, но он не работает.
1 ответ
Решение
Поскольку вы работаете с паролями, я предлагаю переключиться на функцию password_hash() и забыть о небезопасной реализации выше. Функция password_hash() позаботится о соли, и вам не нужно хранить ее отдельно, просто сохраните хеш в одном поле varchar(255).
// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT);
// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);