Php 验证哈希密码
已更新 我已经根据建议更新到PHP5,我仍然不知道如何验证密码 下面是Php 验证哈希密码,php,hash,salt,verify,crypt,Php,Hash,Salt,Verify,Crypt,已更新 我已经根据建议更新到PHP5,我仍然不知道如何验证密码 下面是password\u hash脚本,它将密码输入到一个varchar(255)字段中。(还插入了用户名)。这些都插入了我认为应该插入的数据,比如用户名和密码的长随机码 $options = array( 'cost' => 12 // the default cost is 10 ); $ex_password = password_hash($_POST["ex_password"], PASSWO
password\u hash
脚本,它将密码输入到一个varchar(255)字段中。(还插入了用户名)。这些都插入了我认为应该插入的数据,比如用户名和密码的长随机码
$options = array(
'cost' => 12 // the default cost is 10
);
$ex_password = password_hash($_POST["ex_password"], PASSWORD_BCRYPT, $options);
然后我在我的登录表单上使用以下内容
$sql = "SELECT ex_username, ex_password FROM exhibitormain WHERE ex_username=:ex_username LIMIT 1";
$stmt = $pdo->prepare ( $sql );
$stmt->bindValue( ":ex_username", $ex_username, PDO::PARAM_STR );
$stmt->execute();
$user = $stmt->fetch();
$userExists = $stmt->fetchColumn();
if(!empty($user)){
if (hash_equals($_POST['ex_password'], $user['ex_password'])) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
}else{
echo '<p class="error">No such username found.</p>';;
}
$sql=“从参展商中选择ex_用户名、ex_密码,其中ex_用户名=:ex_用户名限制1”;
$stmt=$pdo->prepare($sql);
$stmt->bindValue(“:ex_username”,$ex_username,PDO::PARAM_STR);
$stmt->execute();
$user=$stmt->fetch();
$userExists=$stmt->fetchColumn();
如果(!empty($user)){
if(hash_等于($_POST['ex_password'],$user['ex_password'])){
echo“密码有效!”;
}否则{
回显“无效密码”;
}
}否则{
echo“未找到此类用户名。
”;;
}
我要做的是检查用户名是否存在,如果存在,然后比较密码是否正确
如果我输入的用户名不在数据库中,我会遵循正确的路径,并显示“找不到这样的用户名”。错误消息,但当我输入的用户名确实存在,并且密码正确或错误时,它总是将我发送到显示错误“无效密码”的路径
谢谢你的帮助
Ian考虑使用密码散列和密码验证功能。它们更容易使用。另外,您愿意升级到PHP5是什么意思?你现在正在运行4吗?是的,使用4.2.7.1,这是一个旧服务器,他们使用PHP5看起来你只是在检查时将参数的顺序颠倒为
crypt
。实际上,你应该升级到至少5.6版的PHP。理想情况下,您应该升级到7.x版本,以获得“最新和最好的”。它也快得多。自PHP5以来,有许多新函数可用,它们将大大减少您的代码(像@Evert提到的那些内置函数)。您的代码也很容易受到SQL注入的影响。您应该看看如何使用PDO
:要访问您的数据库(或使用准备好的语句的任何其他方法,如mysqli
:),请使用hash_equals
函数进行比较查看php crypt第一个示例: