Php 密码验证功能一直不工作

Php 密码验证功能一直不工作,php,encryption,Php,Encryption,我正在尝试验证加密密码,但由于某些原因,它总是无效的 我做错了什么 例如,我的密码是“test”,因此我执行以下操作: $hash = '$2y$10$4Ed6XtU2E6qjzSOSUOA0xuBEA0sokTJMrDBH5ttgJzMVXSh0muoX.'; $password = 'test'; if (password_verify($password, $hash)) { echo 'Password is valid!'; } else { echo 'Invali

我正在尝试验证加密密码,但由于某些原因,它总是无效的

我做错了什么

例如,我的密码是“test”,因此我执行以下操作:

$hash = '$2y$10$4Ed6XtU2E6qjzSOSUOA0xuBEA0sokTJMrDBH5ttgJzMVXSh0muoX.';
$password = 'test';

if (password_verify($password, $hash)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}
但密码“geheim123”不能用于此哈希:

$hash = '$2y$10$LY0l0pOc8vLCzI.VvxK3gOTlXoVwnP2dlAzicj9uE62Q39XfeTY/6';
$password = 'geheim123';

if (password_verify($password, $hash)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}
第二个有效,而另一个无效的原因是什么

这是我加密密码的地方:

$pass = password_hash($_POST['password'], PASSWORD_DEFAULT)."\n";
看来你的“测试”密码没有盐

重新散列你的密码

echo password_hash("test", PASSWORD_DEFAULT)."\n";
这给了我这个
$2y$10$4a8QVv3VZNnXpgbT66I1He6eHqYBj.N94GIS7yHMoEW2Eb1Eq003O
,但运行该代码时可能会得到一个新的哈希值,而不是这个值。但它仍将提供相同的有效状态

    $hash = '$2y$10$4a8QVv3VZNnXpgbT66I1He6eHqYBj.N94GIS7yHMoEW2Eb1Eq003O';
$password = 'test';



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

这些散列从哪里来?我假设它们来自
password\u hash()
,OP是令人困惑的散列。在
test
@rustyx上使用错误的哈希值似乎你的密码没有salt请提供一个。第二个密码有salt,这就是为什么我可以这样做的原因,但出于某种原因,一个有效,另一个无效。是的,它有效,但当我将其更改为使用我的代码时(没有硬编码密码,而是通过表单发布的密码)它停止工作。尝试使用trim password,然后才能散列密码并在验证时修剪输入密码,如
trim($\u POST['password'))
密码中似乎有空白