openssl随机伪字节 - 可重复?

时间:2012-02-25 17:01:28

标签: php php-5.3 password-protection

我从php.net找到了这个 openssl_random_pseudo_bytes 函数。

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。但是如果将来会再次生成相同的值 - 那么它是可重复的

1 个答案:

答案 0 :(得分:0)

任何随机函数,包括上面的函数,都是可重复的 也许你正在寻找PHP函数uniqid?