我正在对我的登录逻辑进行安全审计,并试图找出哪个密码检查更安全,以及更好的算法。下面是伪 PHP 代码中的两种方法:
方法一:
$bcrypt = new Bcrypt();
$password_hash = $bcrypt->hash($_POST['password']);
$result = mysqli_query_check_login($username, $password_hash);
if(mysqli_numb_rows($result) > 0) {
//is valid
}
方法二:
$bcrypt = new Bcrypt();
$result = mysqli_query_check_login($username);
//Note $result->password is a bcrypt hash
if($bcrypt->verify($_POST['password'], $result->password)) {
//is valid
}
不同之处在于method I
运行 bcrypt hash,然后在 mysql 查询中发送用户名和散列密码。Method II
仅通过用户名从 mysql 获取哈希密码,然后在 PHP 中比较这两个值。
安全性有区别吗?
谢谢。