我刚发现我的密码保护区域没有受到保护。密码是使用数字所必需的。现在,如果密码末尾有数字,只要密码的a-z部分正确,就会以某种方式接受登录。为什么这样,我该如何纠正? (PHP 5.4.28)
function generate_hash($password)
{
$salt = openssl_random_pseudo_bytes(22);
$salt = '$2a$%13$' . strtr($salt, array('_' => '.', '~' => '/'));
return crypt($password, $salt);
}
$bind = array(":email" => $email, ":password" => crypt($password, generate_hash($password) ) );
$results = $db->select("users", 'email=:email AND password=:password', $bind);
答案 0 :(得分:2)
我不知道你的问题的具体细节,但你使用的哈希是完全错误的。要使用crypt
,请执行以下操作:
注册时:
$salt
参数:$2a$xx$...
(注意:否%
,这可能导致问题)crypt($password, $salt)
登录时:
crypt($enteredPassword, $databaseHash)
你根本就没有这样做。您可能也应该使用password_hash
来代替使用原始crypt
API时的许多陷阱。