【发布时间】:2014-07-17 09:39:03
【问题描述】:
我使用 crypt() 对密码进行哈希处理,使用这样的河豚盐:
$2a$,2 位数字,$,[a-zA-Z0-9] 中的 21 个字符
这里我犯了一个错误,第三个 $ 之后的字符长度是 21 而不是 22。但它工作正常,所以我没有发现错误。
它适用于我的运行 windows 和 php 5.4.4 的桌面以及运行 Amazon linux 和 php 5.3.x 的 AWS ec2,但盐太短了。
有一天我将 AWS php 更新到 5.5.14。然后问题发生了。 crypt() 一直返回 *0。
经过一番尝试,我在盐的末尾添加了一个 $ ,所以它变成了 22 个字符。它再次工作并返回与以前相同的哈希字符串。虽然它不遵守河豚规则,但字符应该是 [./a-zA-Z0-9]
但是现在我将这个站点复制到另一台运行 openSuSE 13.1 和 php 5.5.14 的机器上,这个盐又失败了。
我将 php 降级到 5.4.20 但没有帮助。
新站点仍然需要旧数据库,所以我必须使密码哈希有效。
影响这个河豚盐长度错误兼容性问题的库或模块是什么? tt好像不是PHP的版本。 AWS 5.5.14
或者还有别的魔法字符可以再次拯救我吗?我尝试将尾 $ 替换为 [./a-zA-Z0-9] 中的每个,但不幸运,哈希字符串不同....
【问题讨论】:
-
与其自己生成盐,不如使用 PHP 的hashing functions?
-
现有系统需要继续工作。
-
“但是现在我在 openSuSE 13.1 中使用 php 5.5.14 构建了另一个站点,这种盐又失败了。”
-
那是同一个系统。只需使用旧数据库复制到具有不同 Linux 发行版的另一台机器。无论如何,这就是我的问题的重点。
-
我编辑我的问题以使其更清楚。感谢您的回复。