Here是该网站。无论谁熟悉这门课程,我的问题都是这个
我将使用该页面上找到的类来散列成员的密码。代码声明看起来像这样
require_once("password.hash.php");
$blowfish = new PasswordHash(8, FALSE);
$blowfish->HashPassword($_POST['password']);
我注意到,当在文本字段中输入密码时,例如我输入密码 sarmenhb 时,创建的哈希不会保持不变,就像我使用它一样MD5。我注意到每次输入 sarmenhb 时密码都会不断变化。
我如何检查用户输入的密码是否与数据库中的密码匹配?
我试过这个
$blowfish->checkpassword($_POST['password'],"password in db");
但没有显示屏幕空白。
我在测试中这样做就是为什么这些字段没有被转义。我只想看看它是否有效,但我没有得到任何结果。有替代方案吗?
ps:我没有为wordpress做这个,它只是在我自己的mvc本地。
更新
我试过这个
include("classes/hash.class.php");
$sec = new PasswordHash(8, FALSE);
$correct = "sarmenhb";
//pass generated from $sec->HashPassword($correct);
$hash = "\$P$\BeJb51gIUh8Qmb1DAW.Hkt1I4gnm2C1";
$check = $sec->CheckPassword($correct, $hash);
if($check) { print "correct"; }
else { print "incorrect"; }
当我运行它时,输出显示不正确。
答案 0 :(得分:1)
在哈希变量中你有斜杠来转义$但是当哈希检查$ P $是字符串的前3个字符时,这些斜杠就是实际字符串的一部分。如果您将其更改为单引号,并删除斜杠,它将起作用
$hash = '$P$BeJb51gIUh8Qmb1DAW.Hkt1I4gnm2C1';
我很困惑,但是当你说$ blowfish-> checkpassword($ _ POST ['password'],“db”中的密码)时没有显示任何内容;当然没有任何东西可以显示它,它返回true或者假,但除非与更多代码结合使用,否则不会打印任何内容。确保存储在数据库中的密码不会以某种形式进行转义或更改。尝试打印您使用的变量吗?
散列密码不会保持不变,因为每次使用它时它都被加盐,这是可以的,因为散列包含盐,以后可以找到它进行比较。 Salts只是随机字符/数字/符号,可以为哈希添加更多方差,使其难以破解。