使用 phpass 测试程序http://www.openwall.com/phpass/phpass-0.3.tar.gz或 python-phpass,并使用C?*|Y[j"KQ'%gf作为纯文本密码, 和$P$9kS6tD8tVxajypvJ5837.bt2emepD8/作为哈希,执行:
<?php
#
# This is a test program for the portable PHP password hashing framework.
#
# Written by Solar Designer and placed in the public domain.
# See PasswordHash.php for more information.
#
require 'PasswordHash.php';
header('Content-type: text/plain');
$t_hasher = new PasswordHash(8, FALSE);
$correct2 = 'C?*|Y[j"KQ\'%gf';
$hash2 = '$P$9kS6tD8tVxajypvJ5837.bt2emepD8/';
print 'Hash: [' . $hash2 . "]\n";
print 'correct: [' . $correct2 . "]\n";
$check = $t_hasher->CheckPassword($correct2, $hash2);
if ($check)
{
print "Check IF THIS WORKScorrect: '" . $check . "' (should be '1')\n";
}
else
{
print "IT FAILED!!!!!!!!\n\n\n";
}
?>
哈希来自 phpBB3 (3.0.10),当我向 phpBB3 提供该密码时,它确实可以正常工作。
phpBB3 应该使用 phpass 本身,使用 $H$ 而不是 $P$。
此示例的 phpBB3 中的数据库条目是:
qlc4pi000000";0;"127.0.0.1";1351902499;"testpass";"testpass";"$H$9kS6tD8tVxajypvJ5837.bt2emepD8/";1351902499;0;"tp@inva.lid.com";266402289712;"'' ";1351902544;1351902499;0;"''";"''";0;0;0;0;0;0;0;"en";0.00;0;"DM d, Y g:i a"; 2;0;"''";0;0;0;0;-3;0;0;"t";"d";0;"t";"a";0;1;0;1; 1;1;1;230271;"''";0;0;0;"''";"''";"''";"''";"''";"''";" ''";"''";"''";"''";"''";"''";"''";"''";"bf4ae169a5a21313";1;0;0
phpBB3 中使用的纯文本密码是 [C?*|Y[j"KQ'%gf] 和哈希(从 phpBB3 格式转换为 [$P$9kS6tD8tVxajypvJ5837.bt2emepD8/] (密码和哈希都在 [] 之间) )
任何人都可以阐明正在发生的事情,以及为什么这不适用于 phpass ?这是在论坛所在的同一台机器上,同样,它确实在 phpBB3 论坛上工作,所以我可以正常登录。当我直接访问 phpBB3 数据库时,我无法在外部使用 phpass 进行身份验证。它确实适用于其他帐户,但它仅适用于某些帐户失败。