我使用crypt()函数将密码存入数据库。
$cryptpass = crypt($user_pass);
现在,当我尝试使用“test”的密码登录时,它无法正常工作。 这是登录的PHP
$user_name = mysql_real_escape_string($_POST['user_name']);
$user_pass = crypt($_POST['user_pass']);
$user_level = mysql_real_escape_string($_POST['user_level']);
$encrypt = md5($user_pass);
$admin_query = "select * from admin_login where user_name='$user_name' AND user_pass='$user_pass' AND user_level='$user_level'";
对不起,我对密码哈希很新,在我将密码保存为纯文本的整个过程中。
编辑:当我回答查询时,这里是结果 crypt = $ 1 $ vh4.Mq4。$ YaABh9aqRKbKpACTDApWb1,从admin_login中选择*其中user_name ='testcr'和user_pass ='$ 1 $ vh4.Mq4。$ YaABh9aqRKbKpACTDApWb1'AND user_level ='a',真正的密码是“test”。< / p>
答案 0 :(得分:0)
尝试调试SQL语句。
$admin_query = "select * from admin_login where user_name='$user_name' AND user_pass='$user_pass' AND user_level='$user_level'";
echo $admin_query;
在SQL引擎中运行查询,看看是否能发现差异。
答案 1 :(得分:0)
您选择了一种非常不安全的方式来存储密码(DES和MD5哈希,而不需要加盐)。您应该考虑使用PHP的函数password_hash()来创建BCrypt哈希。
要进行验证,您首先必须通过用户名从数据库中获取哈希值,然后您可以使用password_verify()验证密码。由于盐的原因,无法使用SQL查询直接验证散列。
// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);
// 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);
如果您有兴趣阅读有关此主题的更多信息,请查看我的safely storing passwords教程。