md5在解密和验证登录详细信息时不起作用

rfbsl7qr  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(266)

我已加密并储存密码。一旦用户登录,我想解密和验证。但下面的代码无法做到这一点。有人能帮忙吗?

<?php
   include("config.php");

   if($_SERVER["REQUEST_METHOD"] == "POST") {

      $myusername = mysqli_real_escape_string($con,$_POST['username']);
      $mypassword =md5(mysqli_real_escape_string($con,$_POST['password']));

      $sql = "SELECT id FROM services WHERE user_name = '$myusername' and password = '$mypassword'";
      $result = mysqli_query($con,$sql);
      $row = mysqli_fetch_array($result,MYSQLI_ASSOC);

      $count = mysqli_num_rows($result);

      if($count == 1) {

         echo "success";

      }else {
         echo "fail";
      }
   }
?>
mqxuamgl

mqxuamgl1#

我找到了其他方法,这是成功的。谢谢你的帮助

<?php
include('config.php');
session_start();
if($_SERVER['REQUEST_METHOD'] == "POST")
{
 //Username and Password sent from Form
 $username = mysqli_real_escape_string($con, $_POST['username']);
 $password = mysqli_real_escape_string($con, $_POST['password']);
 $password = md5($password);
 $sql = "SELECT * FROM services WHERE user_name='$username' AND '$password'";
 $query = mysqli_query($con, $sql);
 $res=mysqli_num_rows($query);

 //If result match $username and $password Table row must be 1 row
 if($res == 1)
 {
 //header("Location: welcome.php");
   echo "did";
 }
 else
 {
 echo "Invalid Username or Password";
 }
}
?>
oyt4ldly

oyt4ldly2#

md5永远不应该用于存储密码。
首先,人们已经知道它已经坏了几十年了,但这并不是最坏的情况。
其次,你使用它时没有随机盐,这使得它容易受到彩虹表攻击。
最后,也是最关键的一点,它是一个快速算法,因此完全不适合密码散列。任何一个有价值的黑客只要掌握了你用户的散列密码,就会在几个小时内找到90%以上的密码,因为你的用户会使用可预测的密码而不是真正的随机密码。
你真的需要使用像password\u hash()这样的东西。

j2datikz

j2datikz3#

无需转义值,该值将被md5散列。如果密码包含一些特殊字符,甚至可以更改密码(和md5散列)。例如,让我们看看密码 test' 哈希:

echo md5(mysqli_real_escape_string($con,$_POST['password']));
echo md5($_POST['password']);

输出为:

e1e7975d4f1958297ede35ea4fc13a27
5c28a8c6d799d302f3ef53afefdfc81b

你不应该这样做:

$row = mysqli_fetch_array($result,MYSQLI_ASSOC);

因为您以后不使用它,也不检查num\u rows是否大于0,如果有0条记录,它将给出一个错误。

相关问题