Php openssl随机伪字节-可重复?

Php openssl随机伪字节-可重复?,php,php-5.3,password-protection,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 ==

我在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;
}
但我想确定它产生的价值是否是可重复的?我在寻找一个不可重复的结果

有人告诉我,穆朗德的价值是不可重复的?但是一个随机数应该是可重复的,因为它已经自我解释过了——马图兰,不是吗

编辑:


例如,我刚刚测试了它,它生成了W8HKS+ngIl7DxxFDxEx6gSn。但是如果将来会再次生成相同的值,那么它是可重复的。

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

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

随机伪字节是不可重复的。确实,任何有限长度的输出最终都必须重复,例如,如果指定长度为1字节,则只有256个可能的字符串,因此必须在256次尝试之后获得与之前相同的字符串,并且很可能更快

但是你说的是实际的而不是数学上的,默认长度是24


是的,随机选取24字节的字符串最终会得到一个你以前拥有的字符串,但这仅在数学界是正确的。在真实的物理世界中,有6277101735386680763537894232076664161023555444464034512896可能存在这样的字符串,这意味着即使你每秒以这种方式生成数十亿个密码,你也不可能在一百万年内两次获得相同的字符串。

随机伪字节是不可重复的。确实,任何有限长度的输出最终都必须重复,例如,如果指定长度为1字节,则只有256个可能的字符串,因此必须在256次尝试之后获得与之前相同的字符串,并且很可能更快

但是你说的是实际的而不是数学上的,默认长度是24


是的,随机选取24字节的字符串最终会得到一个你以前拥有的字符串,但这仅在数学界是正确的。在真实的物理世界中,有62771017353866807635878942320766641610235554464034512896可能存在这样的字符串,这意味着即使你每秒以这种方式生成数十亿个密码,你也不可能在一百万年内两次获得相同的字符串。

你说的可重复性是什么意思,它已经生成了W8HKS+ngIl7DxxFDxEx6gSn,然后将在将来再次生成相同的值-然后它是可重复的。如果输出是固定长度的,那么最终您将再次获得相同的值,例如,如果输出的长度为8,并且有64个可能的值,那么在64^8+1之后,根据鸽子洞原理,至少会有一次重复。谢谢,那么我不能修改长度,但是我们必须修改openssl_random_pseudo_bytes中的长度,正如它所说的那样,php.net-所需字节字符串的长度。必须是正整数。PHP将尝试将此参数强制转换为非空整数以使用它。您所说的可重复性是什么意思?例如,它已生成W8HKS+ngIl7DxxFDxEx6gSn,然后将在将来再次生成相同的值-那么它是可重复的。如果输出是固定长度的,那么您最终将再次获得相同的值,例如,如果输出的长度为8,并且有64个可能的值,那么在64^8+1之后,根据鸽子洞原理,至少会有一次重复。谢谢,那么我不能修改长度,但是我们必须修改openssl_random_pseudo_bytes中的长度,正如它所说的那样,php.net-所需字节字符串的长度。必须是正整数。PHP将尝试将此参数强制转换为非空整数以使用它。任何有限长度强度最终都将重复。但这仅在数学上是正确的——在实际意义上,一个足够长的真正随机字符串永远不会重复。更准确地说:不太可能重复任何有限长度的强度最终会重复。但这仅在数学上是正确的——在实际意义上,一个足够长的真正随机字符串永远不会重复。更准确地说:极不可能重复