mysql aes_encrypt和aes_decrypt

时间:2017-04-07 15:01:15

标签: php mysql

我正在尝试创建一个登录系统,用于加密和解密数据库中的密码(对于我的项目)。我可以使用aes_encrypt来加密密码并将它们存储在数据库中。但是,当我稍后解密它们以找到匹配的登录密码时,它们不起作用。就像aes_decrypt被跳过而没有运行,因为我有明文密码存储在数据库中的帐户,我可以用它们登录,但对于加密密码的帐户,它们不起作用。我正在使用Xampp和phpmyadmin作为数据库。

\x3

1 个答案:

答案 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