我有一个包含用户区和管理区的网站。在管理区域中,我有一个用于创建用户的页面和一个用于创建管理员的页面。在用户和管理员页面上,我使用下面的代码来哈希密码:
$hasher = new PasswordHash(8, false);
$password = $HTTP_POST_VARS['password'];
$hash = $hasher->HashPassword($password);
$HTTP_POST_VARS['password'] = $hash;
对于用户页面,检查密码的代码是:
$hasher = new PasswordHash(8, false);
$check = $hasher->CheckPassword($password, $arrData[$conf['PASSWORD']['FIELD']]);
if ($check) {
//login...
}
这完美无缺。我的用户密码经过哈希处理,并正确检查密码。我在管理员登录页面上使用相同的代码,但它不起作用。它从数据库中提取正确的信息,但是当使用CheckPassword时,密码不匹配。我认为这可能与腌制有关,因为密码的开头部分看起来是一样的。
顺便说一句,我使用的是PHP 4.3。
答案 0 :(得分:2)
我认为这可能与腌制有关,因为密码的开头部分看起来是一样的。
我不知道为什么你会这么想,但是密码的开头部分 - 哈希(!)应该是相同的。 bcrypt创建的哈希使用模块化的crypt格式,该格式不仅包含哈希值,还包括使用的哈希函数,轮数以及用于创建哈希值的salt的指示符。那是相同的部分。另请参阅我从以下位置复制此信息的相关问题:
这可能无法解答您的问题,但希望能为您澄清一些细节,以便您不会错误地查看。
我将数据库设置为现在允许50个字符。有谁知道最长的哈希phpass会生成?
这取决于使用的哈希函数。在Phpass的作者的文章 How to manage a PHP application's users and passwords 中,给出了以下示例Mysql数据库模式:
create database myapp;
use myapp;
create table users (user varchar(60), pass varchar(60));
你在这里看到,这是一个VARCHAR(60)
。这意味着最多60个字符就足够了。
从另一个角度来看,Wordpress也使用Phpass和has the following password column definition:
user_pass VARCHAR(64)
这意味着64个字符对他们来说应该足够了。但请记住,Wordpress也支持其他哈希值,因此这可能只是一般值,而不是Phpass特定值。
参见:
答案 1 :(得分:0)
我想我明白了。存储管理员密码的表未存储整个哈希。我不敢相信我之前没有意识到这一点。
我将数据库设置为现在允许50个字符。有谁知道最长的哈希phpass会生成?