0

当我的用户在注册和登录时输入密码时,我正在使用 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上的某个人也有同样的问题。

4

1 回答 1

3

phpass 支持的首选散列方法是基于 Blowfish 的 bcrypt,回退到 BSDI 样式的扩展基于 DES 的散列,最后的手段回退到在 phpass 本身中实现的基于 MD5 的加盐和可变迭代计数密码散列

您的环境可能正在使用不同的散列算法。您应该确保您的开发和生产环境都支持河豚加密。

作为较弱的替代方案,本文提到:

所有系统都支持在 phpass 本身中实现的基于 MD5 的加盐和拉伸散列。phpass 为您提供了一种强制使用这些“可移植”哈希的方法——这是 PasswordHash 构造函数的布尔参数。

构造函数的第二个选项PasswordHash$portable_hashes它可以强制库生成(较弱的)散列,这些散列可以在机器之间安全移动。尝试使用

$hasher = new PasswordHash(8, true);
于 2012-06-13T13:42:19.283 回答