2012-06-22 2 views

ответ

4

Во многих случаях простой uniqid(mt_rand(), true) будет делать, чтобы генерировать случайные соли. В сочетании с Blowfish вы должны получить довольно хороший хэш пароля.

Альтернативы представляют собой псевдослучайный источник, такой как /dev/urandom или openssl_pseudo_random_bytes(). Существуют также службы, которые генерируют случайные данные для вас (основанные на радиоактивной деградации).

+0

Я думаю, что это openssl_random_pseudo_bytes() из [link] (http://php.net/openssl_random_pseudo_bytes) –

2

Рассмотрите возможность использования случайных соль вместо неслучайное .. Может быть, вы найдете что-то полезное в этой статье http://www.gregboggs.com/php-blowfish-random-salted-passwords/

Также обратите внимание на эту статью http://codahale.com/how-to-safely-store-a-password/

Один подход заключается в генерации уникальная соль для каждого пользователя и хранить эту соль в DB.

Другим хорошим подходом является то, что алгоритм , который генерирует хэш вашего пароля, ДОЛЖЕН рассчитать соль более секунды. Чем сложнее ваш алгоритм хэширования будет - тем больше проблем будут сталкиваться с человеком, который хочет взломать ваш DB

+0

Я не понимаю, что вы подразумеваете под «ДОЛЖНЫ рассчитать соль более секунды». Вы имеете в виду, что для выполнения потребуется больше секунды? Пожалуйста, уточните это. – nullability

+0

@ необузданность да, дольше, чем секунда для выполнения – Ribtoks

3

использовать эту линию для создания сильной соли в PHP

$salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM)); 
1

Вы можете использовать microtime() функции в PHP для генерировать число, основанное на микросекундах, а не секунды, что делает почти невозможным для пользователя иметь равную соль с другим пользователем. Вы также можете умножить этот номер на идентификатор пользователя.

Возможно, md5(uniqid()) достаточно для соли для вашего применения.

Редактировать: забыли указать параметр more_entropy с помощью функции uniqid(). Это меньше, шансы же строк, даже если функция запускает два раза, в то же микросекунду, поэтому отредактированные функция должна выглядеть следующим образом:

$salt = md5(uniqid($user_id, TRUE)); 
Смежные вопросы