0

我对 crypt() 有一种奇怪的行为。这是我在 Zend 中的代码:

$correct_password_hash = $this->getHelper('User')->generateHash('bd468cffe6b179d8e5ef30bd993d37e5','572906092501a20f4222a54.54479708');             
$edited_password_hash = $this->getHelper('User')->generateHash('bd468cffe6b179d8e5ef30bd993d37e','572906092501a20f4222a54.54479708');

echo "Correct Password Hash - ".$correct_password_hash."<br/>";
echo "Edited Password Hash - ".$edited_password_hash;

我将一个 md5 生成的字符串作为第一个参数传递给辅助函数 generateHash,并将一个盐作为第二个参数。我将生成的哈希存储在 $correct_password_hash 变量中。

现在在对同一个辅助函数的第二次调用中,我刚刚删除了第一个参数末尾的字母 5。第二个参数是一样的。但它仍然生成与第一个相同的哈希。

这是输出:

正确的密码哈希 - 57CO1Lzyk81kk
编辑的密码哈希 - 57CO1Lzyk81kk

助手 generateHash 如下:

public function generateHash($md5, $salt)
{
    return crypt($md5, $salt);
}

这是 crypt() 应该如何工作的吗?

谢谢。

4

1 回答 1

3

crypt() 默认为标准的基于 DES 的算法。反过来,它只使用密码中的 8 个第一个字符和 salt 中的 2 个第一个字符。

有关如何修改 crypt() 行为的更多详细信息,请参阅 crypt() 文档:http: //php.net/crypt

如果您正在执行密码哈希,请使用 bcrypt。

于 2012-08-02T08:47:34.730 回答