Мне нужно получить основы этой функции. В документации 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?
}
Спасибо за ваше время