我已加密并储存密码。一旦用户登录,我想解密和验证。但下面的代码无法做到这一点。有人能帮忙吗?
<?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";
}
}
?>
3条答案
按热度按时间mqxuamgl1#
我找到了其他方法,这是成功的。谢谢你的帮助
oyt4ldly2#
md5永远不应该用于存储密码。
首先,人们已经知道它已经坏了几十年了,但这并不是最坏的情况。
其次,你使用它时没有随机盐,这使得它容易受到彩虹表攻击。
最后,也是最关键的一点,它是一个快速算法,因此完全不适合密码散列。任何一个有价值的黑客只要掌握了你用户的散列密码,就会在几个小时内找到90%以上的密码,因为你的用户会使用可预测的密码而不是真正的随机密码。
你真的需要使用像password\u hash()这样的东西。
j2datikz3#
无需转义值,该值将被md5散列。如果密码包含一些特殊字符,甚至可以更改密码(和md5散列)。例如,让我们看看密码
test'
哈希:输出为:
你不应该这样做:
因为您以后不使用它,也不检查num\u rows是否大于0,如果有0条记录,它将给出一个错误。