我正在尝试创建一个登录系统,用于加密和解密数据库中的密码(对于我的项目)。我可以使用aes_encrypt来加密密码并将它们存储在数据库中。但是,当我稍后解密它们以找到匹配的登录密码时,它们不起作用。就像aes_decrypt被跳过而没有运行,因为我有明文密码存储在数据库中的帐户,我可以用它们登录,但对于加密密码的帐户,它们不起作用。我正在使用Xampp和phpmyadmin作为数据库。
\x3
答案 0 :(得分:0)
使用AES_ENCRYPT('$Password','897sdn9j98u98jk'
(在您的查询中)将密码保存到数据库中。
但是您尝试使用
从数据库中检索纯文本密码$pass=$_POST['password'];
// code omitted
$que1=mysql_query("select Email,AES_DECRYPT(Password,'897sdn9j98u98jk') from
users where Email='$user' and Password='$pass'");
// ^^^^^^^^^^^^^^^^^
这就是您可以登录数据库中存储明文密码的帐户的原因。
要解决此问题,您必须在WHERE
子句中搜索加密密码:
(...) WHERE (...) AND Password = AES_DECRYPT($pass, '897sdn9j98u98jk')
<小时/>
您还应该不使用加密来存储您的密码。您应该使用password_hash()
对密码进行哈希处理,并使用password_verify()
进行验证。有关您为什么需要哈希密码而不是加密密码的详细信息,请阅读Fundamental difference between Hashing and Encryption algorithms。