генерация пароля с помощью crypt (32-битная или 64-битная версия)

Я использую эту функцию для генерации пароля:

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

Итак, у меня есть два вопроса:

  1. Почему это происходит? $salt одинаковая длина в обоих
  2. Есть ли проблемы безопасности с 32-битным паролем?

Спасибо!

0

Решение

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. Обе эти проблемы необходимо решить, если вы используете этот код в двух разных системах.

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector