【发布时间】:2014-01-10 00:57:53
【问题描述】:
我有以下密码:
123
现在我散列它并返回以下键:
$2y$10$rSq.2M7Ikc.QPhVtYlp1Nu8HI.Eq5fUgVWn25J
现在我尝试使用以下方法验证相同的密钥:
return password_verify(123, $2y$10$rSq.2M7Ikc.QPhVtYlp1Nu8HI.Eq5fUgVWn25J);
然而这会返回 false。
谁能告诉我为什么?
更新
这是我的完整代码:
<?php
/**
* Created by JetBrains PhpStorm.
* User: Marc
* Date: 14-12-13
* Time: 13:56
* To change this template use File | Settings | File Templates.
*/
class Security {
/**
* @param $string
* @return mixed
*/
public function encrypt($string) {
return password_hash($string, PASSWORD_DEFAULT);
}
/**
* @param $string
* @param $hash
* @return mixed
*/
public function validate($string, $hash) {
return password_verify($string, $hash);
}
}
$hash = $this->db->template("SELECT password FROM User WHERE username = '".$username."'", READ_FROM_QUERY)['password'];
$validate = $this->getSecurity()->validate($password, $hash);
我尝试插入以下字符串:
Helloworld
然而$validate = false;
密码已返回$2y$10$VbicsFaGN9d3ggQTNYIto.Bp6x/rbjpsBe2kneEhJ9oP2KdPsZ7hy
如果我尝试重新散列它,它会返回相同的值,所以它们必须彼此相等,那么为什么它返回 false?!??!
也返回 false
$validate = $this->getSecurity()->validate((string)$password, (string)$hash);
【问题讨论】:
-
尝试将密码作为字符串传递给 password_verify()
-
您是如何生成该哈希的?
password_verify()仅使用password_hash()散列密码运行?!? -
好的,让我试着改写我的问题
-
@MarkBaker 你能更具体地看看我的更新吗?
-
@MarkBaker 将它们作为字符串还是 int 传递并不重要,因为无论如何它都会被转换为字符串。即使在没有任何引号的情况下传递
Helloworld也可以正常工作(尽管会产生未定义的变量警告)。
标签: php passwords password-encryption