Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 验证哈希密码_Php_Hash_Salt_Verify_Crypt - Fatal编程技术网

Php 验证哈希密码

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

已更新

我已经根据建议更新到PHP5,我仍然不知道如何验证密码

下面是
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第一个示例: