我对这些东西不熟悉,但这是我的登录授权页面。
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!";
}
}
在我的数据库中,我有username
,password
和salt
列。密码列包含加密密码。
我的工作流程在这里是否正确?
答案 0 :(得分:1)
您不应加密密码。如果有人能够检索您的用户表,他可以轻松撤消所有密码:
$password = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($salt), base64_decode($row['password']), MCRYPT_MODE_CBC, md5(md5($salt)));
最好使用hash function that is specifically designed for hashing passwords。