0

使用 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 进行身份验证。它确实适用于其他帐户,但它仅适用于某些帐户失败。

4

2 回答 2

1

原来问题是,phpBB3 将密码转换为使用 html 转义码。

现在,一旦密码被转换,它就会匹配 phpBB3 中存储的哈希值。

于 2012-11-05T21:17:14.790 回答
0

phpBB3 最有可能将 PHP 函数htmlspecialchars(没有标志)应用于密码。

在讨论问题https://stackoverflow.com/a/12543884/1148030时,也注意到了 phpBoing 注意到的这一事实。

非标准标识符 $H$ 很有用。当 $H$ 存在时,实现可以知道应用转义来支持 phpBB3。

于 2013-01-12T13:46:42.343 回答