我需要了解这个函数的基本知识。php.net文档针对blowfish算法指出:
使用以下盐值进行Blowfish散列:"$2a$",两位数字成本参数"$",以及字母表"./0-9A-Za-z"中的22个base64数字。在盐值中使用此范围之外的字符将导致crypt()返回一个零长度的字符串
因此,根据定义,下面的代码不应该工作:
echo crypt('rasmuslerdorf', '$2a$07$usesomadasdsadsadsadasdasdasdsadesillystringforsalt$');
然而,它会输出:
$2a$07$usesomadasdsadsadsadaeMTUHlZEItvtV00u0.kb7qhDlC0Kou9e
似乎是crypt()函数将盐值裁剪至长度为22。请问有人可以解释一下吗?
我还无法理解这个函数的另一个方面,即当使用crypt()来比较密码时。参考http://php.net/manual/en/function.crypt.php(查看示例#1)。这是否意味着,如果我对所有加密密码都使用相同的盐值,我必须先进行crypt()处理吗?例如:
$salt = "usesomadasdsadsadsadae";
$salt_crypt = crypt($salt);
if (crypt($user_input, $salt) == $password) {
// FAIL WONT WORK
}
if (crypt($user_input, $salt_crypt) == $password) {
// I HAVE TO DO THIS?
}
感谢您的时间