В некоторых случаях мне нужно создать случайные хеши md5. Знаете ли вы, какие наилучшие / наиболее безопасные способы сделать это?
Я знаю, что rand()
не следует использовать для приложений, связанных с безопасностью. По этой причине я пошел с:
md5( uniqid(mt_rand(),true) );
Теперь я прочитал в руководстве php о uniqid()
, что его нельзя использовать для целей безопасности . Какой смысл имеет смысл, потому что он обычно дает что-то вроде метки времени.
Но хорошо ли это в сочетании со случайным префиксом – mt_rand()
– как и я, или есть что-то лучшее, что следует использовать в этом случае?
Thx заранее!
Вам не нужны «хэши 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())
чтобы получить уникальные ключи. Очень простой способ. Попробуйте.