Я использую эту функцию для генерации пароля:
function generarPassword($password, $cost=11){
$salt = strtr(base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)), '+', '.');
$salt='$'.implode('$',array("2y",str_pad($cost,2,"0",STR_PAD_LEFT),$salt));
return crypt($password,$salt);
}
Моя проблема заключается в том, что когда я использую его на 64-битном сервере, результат таков:
$2y$11$1ws6drmcqHCWG8wj5bm5s.R8Opc0.JEjXy0.P9UsHjqoxjZQ5GYLW
И когда я использую его на 32-битном сервере, результат таков:
$2uUq69/OVG3M
Итак, у меня есть два вопроса:
$salt
одинаковая длина в обоихСпасибо!
CRYPT_BLOWFISH — хеширование Blowfish с солью следующим образом: «$ 2a $»,
«$ 2x $» или «$ 2y $», двухзначный параметр стоимости, «$» и 22 символа
из алфавита «./0-9A-Za-z». Использование символов вне этого
диапазон в соли приведет к тому, что crypt () вернет строку нулевой длиныPHP до 5.3.7 поддерживает только $ 2a $ в качестве префикса соли: PHP 5.3.7
Ваш $salt
не соответствует 22 characters from the alphabet
ограничение алгоритма Blowfish. Вы должны пересмотреть свои процессы по выработке правильной соли.
$salt = strtr(base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)), '+', '.');
echo $salt.' ('.strlen($salt).')';
// example: D3Zc0fv8BBLKYnpH0iSV0w== (24)
Во-вторых, вы используете префикс $2y$
который поддерживается только после PHP 5.3.7. Обе эти проблемы необходимо решить, если вы используете этот код в двух разных системах.
Других решений пока нет …