我需要了解此功能的基础知识。对于河豚算法,php.net 文档指出:
使用盐的河豚散列如下:“$2a$”,两位数的成本参数,“$”,以及字母表“./0-9A-Za-z”中的 22 个基数为 64 位的数字。在盐中使用超出此范围的字符将导致 crypt() 返回零长度字符串
因此,根据定义,这不应该起作用:
echo crypt('rasmuslerdorf', '$2a$07$usesomadasdsadsadsadasdasdasdsadesillystringforsalt$');
然而,它吐出:
$2a$07$usesomadasdsadsadsadaeMTUHlZEItvtV00u0.kb7qhDlC0Kou9e
似乎 crypt() 已将盐本身的长度减少到 22。有人可以解释一下吗?
这个函数的另一个我无法理解的方面是当他们使用 crypt() 来比较密码时。http://php.net/manual/en/function.crypt.php(查看 ex.#1)。这是否意味着如果我使用相同的盐来加密所有密码,我必须先加密它?IE:
$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?
}
谢谢你的时间