Функция быстрой случайной строки PHP

Мне нужен быстрый способ генерации случайных строк 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 для каждого символа, но меня беспокоит ' качество моей реализации. Я не очень разбираюсь в криптографии, поэтому хотел бы спросить, создает ли такая функция «хорошие» случайные значения или нет.

  1. mcrypt_create_iv , похоже, возвращает какие-то случайные двоичные значения, фактически используется для шифрования / дешифрования данных с помощью библиотеки mcrypt. Что такое эффект base64_encode на такие двоичные данные, действительно ли я уменьшаю энтропию, когда я кодирую base64_encode?

  2. Как второй параметр для mcrypt_create_iv влияет на мои результаты? В руководстве php.net указано, что MCRYPT_RAND - это «системный генератор случайных чисел». Это зависит от ОС, и если да, то как создаются хорошие ценности?

8
задан CodesInChaos 25 February 2014 в 10:08
поделиться