回拨加密密码?

时间:2014-09-02 22:11:33

标签: php hash

我使用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>

2 个答案:

答案 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教程。