Php mysql aes_加密和aes_解密

Php mysql aes_加密和aes_解密,php,mysql,Php,Mysql,我正在尝试建立一个登录系统,对数据库中的密码进行加密和解密(用于我的项目)。我可以使用aes_encrypt来加密密码并将其存储在数据库中。但是,当我稍后解密密码以查找用于登录的匹配密码时,它们不起作用。这就像跳过aes_解密而不运行一样,因为数据库中存储了使用明文密码的帐户,我可以使用它们登录,但对于使用加密密码的帐户,它们不起作用。我将Xampp与phpmyadmin一起用于数据库 Signup file <?php if(isset($_POST['signup'])) { mys

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

Signup file
<?php

if(isset($_POST['signup']))
{
mysql_connect("localhost","root","");
mysql_select_db("faceback");

$Email=$_POST['email'];

$que1=mysql_query("select * from users where Email='$Email'");
$count1=mysql_num_rows($que1);

if($count1>0)
{
echo "<script>
alert('There is an existing account associated with this email.');
</script>";
}
else
{
$Name=$_POST['first_name'].' '.$_POST['last_name'];
$Password=$_POST['password'];
$Gender=$_POST['sex'];
$Birthday_Date=$_POST['day'].'-'.$_POST['month'].'-'.$_POST['year'];
$FB_Join_Date=$_POST['fb_join_time'];

$day=intval($_POST['day']);
$month=intval($_POST['month']);
$year=intval($_POST['year']);
if(checkdate($month,$day,$year))
{
$que2=mysql_query("insert into 
users(Name,Email,Password,Gender,Birthday_Date,FB_Join_Date) 
values('$Name','$Email',AES_ENCRYPT('$Password','897sdn9j98u98jk'),
'$Gender','$Birthday_Date','$FB_Join_Date')");

session_start();
$_SESSION['tempfbuser']=$Email;
}

Login file
<?php


if(isset($_POST['Login']))
{
mysql_connect("localhost","root","");
mysql_select_db("faceback");

$user=$_POST['username'];
$pass=$_POST['password'];



$que1=mysql_query("select Email,AES_DECRYPT(Password,'897sdn9j98u98jk') from 
users where Email='$user' and Password='$pass'");
$count1=mysql_num_rows($que1);

if($count1>0)
{
session_start();
$_SESSION['tempfbuser']=$user;
}
注册文件

您可以使用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')

然而:
您还应该不要使用加密来存储密码。您应该使用哈希来验证密码。有关为什么需要哈希密码而不是加密密码的详细信息,请阅读。

您的代码容易受到SQL注入攻击。您应该使用或准备语句,如中所述。
mysql.*
函数从PHP v5.5开始就被弃用,并从v7.0开始被删除。它们不应用于新代码,应尽快替换为新代码或等效代码。不要使用mysql的AES加密作为密码。而应使用PHP和函数。如果不想被烧坏,请不要玩火。你会得到ha如果你打算在网上使用此代码,我会打电话给你。如果这吓到了你;太好了,因为我的工作做得很好。应该不可能解密密码…永远。我尝试使用$Password,但它们也不起作用。我使用加密是因为我需要提供密码,以防用户忘记密码,需要恢复密码。@mr.newbie你应该使用它ver send passwords in clear!您应该为他们提供一个“reset password”功能,向他们的帐户发送一个一次性重置链接。$que1=mysql\u查询($select Email,AES\u DECRYPT(password,'897sdn9j98u98jk'),来自电子邮件='user'和密码='pass'的用户);我认为Password指的是解密后的密码,而$pass指的是用户输入的密码?是的,但您存储的是加密后的密码!您应该检查数据库是否包含(WHERE子句)这是加密密码而不是明文版本。您正在尝试检索解密密码。@mr.newbie我添加了一些新代码,应该对您有所帮助,但您应该散列密码而不是加密密码。