Мне нужен быстрый способ генерации случайных строк a-Z0-9 в PHP. Я немного подумал и протестировал, вот что у меня так далеко:
function randStr($length) {
$result = null;
$replace = array('/', '+', '=');
while(!isset($result[$length-1])) {
$result.= str_replace($replace, NULL, base64_encode(mcrypt_create_iv($length, MCRYPT_RAND)));
}
return substr($result, 0, $length);
}
Функция, кажется, работает быстро по сравнению с функциями, которые выполняют итерацию и выбирают случайное значение ASCII для каждого символа, но меня беспокоит «качество» моей реализации. Я не очень разбираюсь в криптографии, поэтому я хотел бы спросить, создает ли этот тип функции «хорошие» случайные значения или нет.
mcrypt_create_iv
, кажется, возвращает какие-то случайные двоичные значения, фактически используемые для шифрования / дешифрования данных с помощью библиотеки mcrypt. Каков эффект base64_encode для этого вида двоичных данных, действительно ли я уменьшаю энтропию, когда я base64_encode это?
Как второй параметр для mcrypt_create_iv
влияет на мои результаты? Руководство php.net утверждает, что MCRYPT_RAND
- это «системный генератор случайных чисел». Это зависит от конкретной ОС и, если да, то как создаются хорошие значения?