【问题标题】:How do i query mysql database in php using password_verify [duplicate]我如何使用password_verify在php中查询mysql数据库[重复]
【发布时间】:2016-01-16 14:28:06
【问题描述】:

通常你会像这样在php中编写一个sql语句来查询mysql数据库。

$sql="select * from table where userid='username' and password='$pass'";

我的问题是,如果我使用 password_hash($pass,PASSWORD_BCRYPT) 来加密我的密码,我该如何编写上述查询来从我的数据库中检索一些行,因为存储在数据库中的哈希密码不会是用户输入相同的文本密码? 请建议。谢谢。

【问题讨论】:

  • 我的问题有什么问题?

标签: php mysql password-hash


【解决方案1】:

用于将密码存储到数据库中

<?php
/**
 * Note that the salt here is randomly generated.
 * Never use a static salt or one that is not randomly generated.
 *
 * For the VAST majority of use-cases, let password_hash generate the salt randomly for you
 */
$options = [
    'cost' => 11,
    'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
];
echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options)."\n";
?>

如果您想使用 password_verify() 函数验证密码。

首先,从数据库中获取存储的散列密码,然后使用password_verify()函数

<?php
// See the password_hash() example to see where this came from.
$hash = '$2y$11$lBi3B5rakkB6CBJRLn2e6O1RppUr2y5r0W/4Z0jJBGqE9cdYK.1sa';

if (password_verify('rasmuslerdorf', $hash)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}

?>

Click HERE TO CHECK

【讨论】:

  • echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options)."\n"; - ."\n" 需要在此处删除。这将在哈希中存储一个隐藏的换行符,从而无法使用password_verify()。手册php.net/manual/en/function.password-hash.php 已经更新。
猜你喜欢
  • 2015-09-30
  • 2015-02-21
  • 2020-07-18
  • 1970-01-01
  • 2013-04-10
  • 2016-12-27
  • 1970-01-01
  • 2012-03-21
  • 2013-12-05
相关资源
最近更新 更多