PHP登录系统——我做得对吗?
我对这东西有点陌生,但这是我的登录授权页面PHP登录系统——我做得对吗?,php,security,login,Php,Security,Login,我对这东西有点陌生,但这是我的登录授权页面 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"; $stm
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
列。密码列包含加密的密码
我的工作流程是否正确?您不应该加密密码。如果有人能够检索您的用户表,他可以轻松地撤消所有密码:
$password = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($salt), base64_decode($row['password']), MCRYPT_MODE_CBC, md5(md5($salt)));
最好使用。@Zaffy您不应该加密密码,而应该对密码进行哈希运算。加密是可逆的,而散列(至少在理论上)不是。他特别说,你应该散列而不是加密密码。您将打开密码进行解密
$decrypted=rtrim(mcrypt_decrypt(mcrypt_RIJNDAEL_256,md5($key),base64_decode($encrypted),mcrypt_MODE_CBC,md5(md5($key)),“\0”)代码>@Mr.Alien SHA-1即将被替换。大多数有安全意识的人都会使用硬件可扩展的算法,比如bcrypt或scrypt