Как сделать абсолютно оригинальную соль для каждого пользователя? Лучше ли использовать функцию time()
в PHP?PHP лучший способ солить пароль в наше время
ответ
Во многих случаях простой uniqid(mt_rand(), true)
будет делать, чтобы генерировать случайные соли. В сочетании с Blowfish вы должны получить довольно хороший хэш пароля.
Альтернативы представляют собой псевдослучайный источник, такой как /dev/urandom
или openssl_pseudo_random_bytes()
. Существуют также службы, которые генерируют случайные данные для вас (основанные на радиоактивной деградации).
Рассмотрите возможность использования случайных соль вместо неслучайное .. Может быть, вы найдете что-то полезное в этой статье http://www.gregboggs.com/php-blowfish-random-salted-passwords/
Также обратите внимание на эту статью http://codahale.com/how-to-safely-store-a-password/
Один подход заключается в генерации уникальная соль для каждого пользователя и хранить эту соль в DB.
Другим хорошим подходом является то, что алгоритм , который генерирует хэш вашего пароля, ДОЛЖЕН рассчитать соль более секунды. Чем сложнее ваш алгоритм хэширования будет - тем больше проблем будут сталкиваться с человеком, который хочет взломать ваш DB
Я не понимаю, что вы подразумеваете под «ДОЛЖНЫ рассчитать соль более секунды». Вы имеете в виду, что для выполнения потребуется больше секунды? Пожалуйста, уточните это. – nullability
@ необузданность да, дольше, чем секунда для выполнения – Ribtoks
использовать эту линию для создания сильной соли в PHP
$salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
Вы можете использовать microtime()
функции в PHP для генерировать число, основанное на микросекундах, а не секунды, что делает почти невозможным для пользователя иметь равную соль с другим пользователем. Вы также можете умножить этот номер на идентификатор пользователя.
Возможно, md5(uniqid())
достаточно для соли для вашего применения.
Редактировать: забыли указать параметр more_entropy с помощью функции uniqid()
. Это меньше, шансы же строк, даже если функция запускает два раза, в то же микросекунду, поэтому отредактированные функция должна выглядеть следующим образом:
$salt = md5(uniqid($user_id, TRUE));
Я думаю, что это openssl_random_pseudo_bytes() из [link] (http://php.net/openssl_random_pseudo_bytes) –