PHP md5密码不等于数据库md5密码

PHP md5密码不等于数据库md5密码,php,mysql,Php,Mysql,因此,我的登录脚本出现了这个问题,存储在MySQL数据库中的MD5密码被解密,它将检查密码是否与输入的密码相同 我的代码如下: if(isset($_POST['btn-login'])) { $email = mysqli_real_escape_string($_POST['email']); $upass = mysqli_real_escape_string($_POST['pass']); $md5_pass = md5($upass); $res = mysqli_query

因此,我的登录脚本出现了这个问题,存储在MySQL数据库中的MD5密码被解密,它将检查密码是否与输入的密码相同

我的代码如下:

if(isset($_POST['btn-login']))
{
 $email = mysqli_real_escape_string($_POST['email']);
 $upass = mysqli_real_escape_string($_POST['pass']);
 $md5_pass = md5($upass);
 $res = mysqli_query($con, "SELECT * FROM users WHERE email='$email'");
 $row = mysqli_fetch_array($res, MYSQLI_ASSOC);
 if($row['password'] == $md5_pass)
 {
  $_SESSION['user'] = $row['user_id'];
  header("Location: profile.php");
 }
 else
 {  ?>
  <script>alert("Wrong details entered!");</script>
  <?php
 }

}
if(isset($\u POST['btn-login']))
{
$email=mysqli\u real\u escape\u字符串($\u POST['email']);
$upass=mysqli\u real\u escape\u字符串($\u POST['pass']);
$md5_pass=md5($upass);
$res=mysqli_查询($con,“从电子邮件地址为“$email”的用户中选择*);
$row=mysqli\u fetch\u数组($res,mysqli\u ASSOC);
如果($row['password']=$md5_pass)
{
$\u会话['user']=$row['user\u id'];
标题(“位置:profile.php”);
}
其他的
{  ?>
警报(“输入了错误的详细信息!”);
这两个md5()将是相同的。必须检查列数据类型和字符数限制


检查您的数据库是否具有加密值。因为您正在将其与
md5()
值进行比较。

在对查询执行md5之前,请不要转义

如果您有一个太小的varchar,Ankii的回复也可以解决这个问题

另外,使用更好的散列系统(sha512?)。
另外,使用salt。

如何将新用户保存到数据库?顺便说一句,数据库中的md5密码在比较时不会被解密,您只需比较哈希。如果您使用的是
mysqli
,可以说您也应该使用准备好的语句。请阅读并特别阅读关于密码哈希的部分。顺便说一句,您可能应该有
 $md5_pass=md5($_POST['pass']));
@akasharm我的密码在数据库中是md5加密的。数据库保存加密的密码。因此,我的脚本将加密用户输入的密码,并检查加密的密码是否与数据库中的密码相同。列数据类型和字符数限制是什么?@BroskyaPI正在使用varchar(50)@ankiigangrade您能
echo
并粘贴这两个变量吗:
$row['password']
$md5_pass
只返回
$md5_pass
,它返回:
cc03e747a6afbbcbf8be7668acfebee5
更好的散列系统是bcrypt、scrypt或某种KDF作为最后手段。嘿@Ja͢ck,我以后一定会使用它!