【发布时间】:2021-07-26 00:06:17
【问题描述】:
这是我的场景:
我有一个函数可以在调用时发出 json 响应。它在一个包含 Signup.class.php 的类中,其中包含 Signup 类。如上所示,在 gen_hash() 函数中访问 GET 参数 pass 的位置。代码如下。
代码位于https://api1.selfmade.ninja/api/gen_hash?pass=hellooo
private function gen_hash(){
if(isset($this->_request['pass'])){
$s = new Signup("", $this->_request['pass'], "");
$hash = $s->hashPassword();
$data = [
"hash" => $hash,
"info" => password_get_info($hash),
"val" => $this->_request['pass'],
"verify" => password_verify($this->_request['pass'], $hash),
"spot_verify" => password_verify($this->_request['pass'], password_hash($this->_request['pass'], PASSWORD_BCRYPT))
];
$data = $this->json($data);
$this->response($data,200);
}
}
这个函数调用Signup.class.php,代码如下:
<?php
require_once('Database.class.php');
class Signup {
private $username;
private $password;
private $email;
private $db;
public function __construct($username, $password, $email){
$this->db = Database::getConnection();
$this->username = $username;
$this->password = $password;
$this->email = $email;
}
public function getInsertID(){
}
public function hashPassword(){
//echo $this->password;
return password_hash($this->$password, PASSWORD_BCRYPT);
}
}
问题如下:
-
gen_hash()中的“spot_verify”数组键具有可按预期工作的代码。 - 但来自
gen_hash()的“验证”数组键的代码未按预期工作。无论情况如何,它总是说假话。哈希是从Signup::hashPassword()函数生成的。这一切都按预期工作。该值设置正确,并从Signup::hashPassword()中传递给password_hash函数。但在“验证”下的 gen_hash() 中,它只是告诉错误。
代码位于https://api1.selfmade.ninja/api/gen_hash?pass=hellooo
它给出了以下答案,没有任何意义。为什么验证是假的?:
{
"hash": "$2y$10$Y3bq8EzFmEpgM6zZqONeeeP3gaUkSClyjmS3NCWxrpFS6R8okRHJG",
"info": {
"algo": "2y",
"algoName": "bcrypt",
"options": {
"cost": 10
}
},
"val": "hellooo",
"verify": false,
"spot_verify": true
}
我已经做了什么?我确保将相同的密码值传递给 password_hash 和 password_verify。但这没有任何意义。我错过了什么?
【问题讨论】:
标签: php password-hash