случайные псевдобайты openssl - повторяемы? - PullRequest
0 голосов
/ 25 февраля 2012

Я нашел это openssl_random_pseudo_bytes функции от php.net.

function generate_password($length = 24) {

    if(function_exists('openssl_random_pseudo_bytes')) {
        $password = base64_encode(openssl_random_pseudo_bytes($length, $strong));
        if($strong == TRUE)
            return substr($password, 0, $length); //base64 is about 33% longer, so we need to truncate the result
    }

    # fallback to mt_rand if php < 5.3 or no openssl available
    $characters = '0123456789';
    $characters .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/+'; 
    $charactersLength = strlen($characters)-1;
    $password = '';

    # select some random characters
    for ($i = 0; $i < $length; $i++) {
        $password .= $characters[mt_rand(0, $charactersLength)];
    }        

    return $password;
}

Но я хочу быть уверен, что генерируемое значение повторяется или нет?Я ищу результат, который нельзя повторить.

Мне сказали, что значение из mt_rand() равно , а не повторяется?но случайное число должно быть повторяемым, как само собой объяснимо - mt_ rand , не так ли?

РЕДАКТИРОВАТЬ:

Например, я только что проверил, и он сгенерировал W8hhkS+ngIl7DxxFDxEx6gSn.но если в будущем снова будет генерироваться то же значение, то оно будет повторяемым .

Ответы [ 2 ]

6 голосов
/ 17 августа 2012

random_pseudo_bytes не повторяется. Это правда, что любой вывод конечной длины должен в конечном итоге повторяться, например, если вы укажете длину в 1 байт, тогда будет только 256 возможных строк, так что вы должны получить ту же строку, что и раньше, не позднее чем после 256 попыток (и, вероятно, немного раньше).

Но вы говорите практически , а не математически и имеют длину по умолчанию 24.

Да, выбор случайных 24-байтовых строк в конечном итоге даст вам строку, которая была у вас раньше, но это верно только для математической вселенной. В реальной физической вселенной существует 6277101735386680763835789423207666416102355444464034512896 таких возможных строк, что означает, что даже если вы генерируете миллиарды паролей таким образом каждую секунду, вы все равно вряд ли получите одну и ту же строку дважды за миллион лет.

0 голосов
/ 06 мая 2012

Любая случайная функция, включая приведенную выше, повторяется.
Возможно, вы ищете функцию PHP uniqid?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...