PHPass拒绝检查哈希值

时间:2014-03-25 03:19:55

标签: php phpass

include 'lib/php/PasswordHash.php';

$hash = $_GET['hash'];
$pass = $_GET['pass'];

$hasher = new PasswordHash(8, false);
$pass = $hasher->HashPassword($pass);
echo "Original:<br>" . $pass . "<br>";
$checked = $hasher->CheckPassword($pass, $hash);
echo "Hashed:<br>" . $checked . "<br>";
echo "<br>";
echo "Are they equal? <b>"; 
if($pass == $checked){ echo "Yep!</b>";} else{
    echo "Nope. </b>";
}

上面那段非常简单的代码根本无法正常工作。是的,传递变量被哈希并正确输出,但CheckPassword()无法输出任何内容。我测试了一个简单的单词&#34;你好&#34;并将它们直接插入到函数中(例如CheckPassword(&#39; $ 2 ...&#39;,&#39; $ 2 ...&#39;);它仍然不输出任何内容。

我在XAMPP Windows上运行,我只是被迫得出结论必定是问题所在。我使用此代码而不是实际项目来删除数据库作为一个因素,并发现了这个问题。

尽量避免自己呕吐代码的丑陋,但这是一种绝望的尝试让它发挥作用。

如果您自己运行此代码,则需要同时放置“通过”代码。和一个&#39;哈希&#39;在URL中使用GET变量来测试它。我很可能在某个地方犯了一个可怕的错误,所以我对自己的环境一无所知。

编辑:

我使用下面的代码生成要在URL中使用的初始变量

    $hash = $_GET['hash'];

$hasher = new PasswordHash(8, false);
$hash = $hasher->HashPassword($pass);

echo $hash;

1 个答案:

答案 0 :(得分:2)

您错误地使用了CheckPassword。第一个论点应该是纯文本;哈希,according to the documentation。您正在将$pass设置为散列值,然后将其用作CheckPassword中的第一个参数。

更正后的代码(未经测试):

include 'lib/php/PasswordHash.php';

$hash = $_GET['hash'];
$pass = $_GET['pass'];

$hasher = new PasswordHash(8, false);
// Just delete this line: $pass = $hasher->HashPassword($pass);
echo "Original:<br>" . $pass . "<br>";
$checked = $hasher->CheckPassword($pass, $hash);
echo "Hashed:<br>" . $checked . "<br>";
echo "<br>";
echo "Are they equal? <b>"; 
if($pass == $checked){ echo "Yep!</b>";} else{
    echo "Nope. </b>";
}

P.S。我不确定您为何要从$hash获取$_GET的值。如果您让用户同时指定密码和哈希,他们可以欺骗您的应用程序授予访问权限。我假设这只是一个测试,你将在你的真实应用程序中使用数据库或其他安全存储。