2016-12-27 6 views
0

Моя тестовая функция:Соли, хранящиеся неправильно в базе данных.!

<?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);*/ 

?> 

Hash класс:

<?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); 
    } 
} 

?> 

database structure

Соль я храню и соль извлекается из базы данных не соответствует. Я просмотрел другие сообщения, которые, как представляется, увеличивают размер столбца, но не работают.

ответ

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);