str_shuffle и случайность

Некоторое время назад я написал генератор случайных строк, который строит строку, используя символ mt_rand () th в строке, пока не будет достигнута желаемая длина.

public function getPassword ()
{
    if ($this -> password == '')
    {
        $pw             = '';
        $charListEnd    = strlen (static::CHARLIST) - 1;
        for ($loops = mt_rand ($this -> min, $this -> max); $loops > 0; $loops--)
        {
            $pw .= substr (static::CHARLIST, mt_rand (0, $charListEnd), 1);
        }
        $this -> password   = $pw;
    }
    return $this -> password;
}

(CHARLIST - константа класса, содержащая пул символов для пароля. $ Min и $ max - ограничения длины)

Сегодня, исследуя что-то другое, я наткнулся на следующий код:

function generateRandomString ($length = 10) {    
    return substr(str_shuffle ("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length);
}

Это выполняет тот же эффект, что и мой зацикленный код на основе mt_rand () в одну строку. Мне действительно нравится это по той простой причине, что меньше строк кода - это всегда хорошо. :)

Но когда я посмотрел str_shuffle в PHP 'Руководство по документации на нем было довольно легким. Одна вещь, которую я действительно хотел узнать, - какой алгоритм он использует для случайности? Руководство нене говоря уже о том, какой тип рандомизации делается для получения перемешанной строки. Если он использует rand () вместо mt_rand (), то, в конце концов, лучше придерживаться моего текущего решения.

Так что в основном яЯ хотел бы знать, как str_shuffle рандомизирует строку. Это использует rand () или mt_rand ()? Я'Я использую мою функцию случайных строк для генерации паролей, поэтому качество случайности имеет значение.

ОБНОВИТЬ: Как было отмечено, метод str_shuffle не эквивалентен коду I 'м уже используется и будет менее случайным из-за строки 'Символы s остаются такими же, как у ввода, только с измененным их порядком. Однако я'Мне все еще интересно, как функция str_shuffle рандомизирует свою входную строку.

Ответы на вопрос(3)

Ваш ответ на вопрос