当我的用户在注册和登录时键入密码时,我正在使用phpass。当我在Mac上本地工作时,它正在工作。
但是当我在线时对密码进行哈希处理时,就像是以错误的方式进行散列。
我已将本地数据库导入到在线数据库。当我在线时,当我在当地工作时产生的密码完美无缺。
所以..当我在网上使用phpass时,就像是完全错误了。
我正在使用它:
$hasher = new PasswordHash(8, FALSE);
$password = HashPassword($_POST["password"]);
这会给我一些类似的东西:
_zzD.NrhAaUmhr6G8i5E //when I'm local
$2a$08$mt3//cn0tqMmug/.tjKeC.AbZhYyj470EY9zSivZvNOtwk4A //when I'm online
当我检查密码时,它是这样的:
$hasher = CheckPassword($_POST["password"], $row["password"]);
//$_POST is ofc. the submitted
//$row is the password for the user from the db.
//the user is found on the username and then im checking password.
我完全不知道出了什么问题。我希望SO上有人遇到同样的问题。
答案 0 :(得分:3)
phpass支持的首选哈希方法是基于Blowfish的bcrypt,具有回退到BSDI风格的基于DES的扩展哈希,并且是最后的手段回退到基于MD5的盐渍和变量迭代计数密码哈希在phpass本身实现< / p>
您的环境可能正在使用不同的哈希算法。您应该确保开发和生产环境都支持blowfish加密。
作为一种较弱的选择,this文章提到:
所有系统都支持在phpass中实现的基于MD5的盐渍和拉伸哈希。 phpass提供了一种强制使用这些“可移植”哈希的方法 - 这是PasswordHash构造函数的布尔参数。
PasswordHash
构造函数的第二个选项是$portable_hashes
,它可以强制库生成(较弱的)哈希值,这些哈希值可以在机器之间移动。尝试使用
$hasher = new PasswordHash(8, true);