Как вы создаете «хорошие» случайные хеши md5 в php?

В некоторых случаях мне нужно создать случайные хеши md5. Знаете ли вы, какие наилучшие / наиболее безопасные способы сделать это?

Некоторые варианты использования

  • Проверка адреса электронной почты
  • Сброс паролей
  • Какой-то идентификатор сеанса, используемый для аутентификации, вместо пароля (например: когда кто-то нажимает «помнить меня», я не хотел бы хранить проход в файле cookie)

Задний план

Я знаю, что rand() не следует использовать для приложений, связанных с безопасностью. По этой причине я пошел с:

 md5( uniqid(mt_rand(),true) ); 

Теперь я прочитал в руководстве php о uniqid() , что его нельзя использовать для целей безопасности . Какой смысл имеет смысл, потому что он обычно дает что-то вроде метки времени.

Но хорошо ли это в сочетании со случайным префиксом – mt_rand() – как и я, или есть что-то лучшее, что следует использовать в этом случае?

Thx заранее!

    Related of "Как вы создаете «хорошие» случайные хеши md5 в php?"

    Вам не нужны «хэши MD5», вам просто нужна произвольная строка символов. Они вообще не должны иметь ничего общего с MD5. Так что все, что вам нужно, это хороший PRNG. Например:

     $token = mcrypt_create_iv($rawLength, MCRYPT_DEV_URANDOM); // or $token = openssl_random_pseudo_bytes($rawLength); // or $token = file_get_contents('/dev/urandom', false, null, 0, $rawLength); 

    Затем base64_encode или bin2hex необработанное значение для получения символьной строки ASCII.

    Я только что закончил разработку довольно надежного сценария Bash, который генерирует достойное качество md5sum. Вы можете найти https://code.google.com/p/gen-uniq-id/source/browse/gen_uniq_id.bsh

    Он имеет следующие функции:

    Отпечаток времени до наносекунд,

    Модифицируемая пользователем сумма собранных данных из / dev / urandom (по умолчанию – 0,25 секунды),

    Модифицируемое пользователем количество собранных данных перемещения мыши (по умолчанию составляет 0,25 секунды, просто используйте xinput --list и запустите его один раз с помощью -M<your_mouse_device_id> ),

    Динамически изменяемый текстовый оператор, который может быть установлен по умолчанию или отправлен динамически с каждым вызовом, например, -s"$(history | tail -5)" .

    Вы, вероятно, можете легко перейти на PHP или просто вызвать его из PHP через shell_exec:
    $random_md5sum = shell_exec('/path/to/gen_uniq_id.bsh -m1 -r1 -s"favorite quote$(history | tail -5)"');

    вы можете использовать md5(date()) чтобы получить уникальные ключи. Очень простой способ. Попробуйте.