base_convert(uniqid('pass', true), 10, 36);
например.e0m6ngefmj4
РЕДАКТИРОВАТЬ
Как я уже упоминал в комментариях, длина означает, что атаки методом "грубой силы" будут работать лучше, чем атаки по времени, поэтому это не очень актуально.беспокоиться о том, «насколько безопасен генератор случайных чисел».Безопасность, особенно для этого варианта использования, должна дополнять удобство использования, поэтому приведенное выше решение на самом деле достаточно хорошо для требуемой проблемы.
Однако на всякий случай вы наткнулись на этот ответ при поиске безопасного генератора случайных строк (как я полагаю, некоторые люди основывались на ответах), для чего-то, например, для генерации токенов, вот как должен выглядеть генератор таких кодов:
function base64urlEncode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
function secureId($length = 32) {
if (function_exists('openssl_random_pseudo_bytes')) {
$bytes = openssl_random_pseudo_bytes($length);
return rtrim(strtr(base64_encode($bytes), '+/', '0a'), '=');
}
else { // fallback to system bytes
error_log("Missing support for openssl_random_pseudo_bytes");
$pr_bits = '';
$fp = @fopen('/dev/urandom', 'rb');
if ($fp !== false) {
$pr_bits .= @fread($fp, $length);
@fclose($fp);
}
if (strlen($pr_bits) < $length) {
error_log('unable to read /dev/urandom');
throw new \Exception('unable to read /dev/urandom');
}
return base64urlEncode($pr_bits);
}
}