在从 Zend Server CE 5.1 升级到 Zend Server CE 5.5 的过程中,PHP 也从 5.3.5 升级到了 5.3.8。在此转换之后,我正在处理的 Zend 应用程序的登录功能突然中断。
尝试调试它,看起来它的实现crypt()
不反映 PHP 手册,或者我误解了它。如果我大胆猜测,那就是后者。
我使用 16 个字符长的盐作为使用 SHA256 的较大盐的一部分,该盐用作 PHP 手册中的示例。
$password = //string entered at login
$salt = '$5$rounds=250000$1234abcd5678defg$';
在我对输入的密码进行哈希处理后
$hash = crypt($password, $salt);
我得到一个这样的字符串作为返回值:
$5$rounds=250000$1234abcd5678$tI.Oiz.YwWjIwT3K.SLU8SwUZ9J0/odBCkbE6t0igeB
让我感到困惑的是,16 个字符的盐,即较大部分的一部分(上面的1234abcd5678defg),现在被截断为 12 个字符。
这是预期的吗?该crypt()
函数现在似乎也返回了与以前不同的结果——这在 PHP 版本之间是常见的吗?更新日志中没有任何内容表明对加密算法有任何根本性的改变。