2

我对这些东西有点陌生,但这是我的登录授权页面。

function encrypt($password, $salt) {
    return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($salt), $password, MCRYPT_MODE_CBC, md5(md5($salt))));
}

$query = "SELECT * FROM users WHERE LOWER(`username`) = :user";
$stmt = $dbh->prepare($query);
$stmt->bindValue(':user', strtolower($_POST['username']));
$stmt->execute();

if ($stmt->rowCount() == 1) {
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    if (encrypt($_POST['password'], $row['salt']) == $row['password']) {
        echo "Logged in!";
    }
}

在我的数据库中,我有列usernamepasswordsalt。密码列包含加密的密码。

我的工作流程在这里正确吗?

4

1 回答 1

1

您不应该加密密码。如果有人能够检索您的用户表,他可以轻松地反转所有密码:

$password = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($salt), base64_decode($row['password']), MCRYPT_MODE_CBC, md5(md5($salt)));

最好使用专门为散列密码设计的散列函数

于 2012-10-03T20:52:21.850 回答