我对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,并将一个salt作为第二个参数。我将生成的哈希存储在$correct_password_hash变量中。
现在,在对同一个helper函数的第二次调用中,我刚刚删除了第一个参数末尾的字母5。第二个参数是相同的。但它仍然生成与第一个相同的散列。
这是输出:
正确的密码哈希-57CO1Lzyk81kk
已编辑的密码哈希-57CO1Lzyk 81kk
helper generateHash如下所示:
public function generateHash($md5, $salt)
{
return crypt($md5, $salt);
}
crypt()应该是这样工作的吗?
谢谢。
crypt()默认为基于DES的标准算法。这反过来只使用密码中的8个第一个字符和salt中的2个第一个字母。
有关如何修改crypt()行为的更多详细信息,请参阅crypt)文档:http://php.net/crypt
如果您正在进行密码哈希,请使用bcrypt。