Мне нужно получить основы этой функции. В документации php.net для алгоритма blowfish указано, что:
Хлеб Blowfish с солью следующим образом: "$ 2a $", двухзначный параметр стоимости, "$" и 22 базовых 64 цифры из алфавита "./0-9A-Za-z". Использование символов вне этого диапазона в соли приведет к тому, что 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?
}
Спасибо за ваше время