【发布时间】:2011-03-09 07:26:20
【问题描述】:
我需要了解此功能的基础知识。对于河豚算法,php.net 文档指出:
使用盐的 Blowfish 散列如下:“$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(参见前文#1)。这是否意味着如果我使用相同的盐来加密所有密码,我必须先加密它?即:
$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?
}
感谢您的宝贵时间
【问题讨论】:
-
我无耻地撞了这个。我剩下的问题是我对 ZZ Coder 的回复,看这篇文章的底部。
标签: php encryption bcrypt