我目前正在执行一个登录系统。 我想存储的密码,并在数据库中的盐。 现在我发现有一个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;
}