random_int生成的值小于最小值



我正在使用random_int生成密码,但我注意到一些奇怪的事情。有时(纯随机),它会生成小于最小值的密码。例如,我设置了1015限制,一旦大约50-70尝试一次,它就会弹出一个2-3字符长的密码。我的脚本有问题吗?很难重现输出,只需刷新脚本,直到获得类似的结果。

<?php 
    $r_number = random_int( 10 , 15 );
    function random_str(
        $length,
        $keyspace = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,./<>?;:"|[]{}-=_+`~!@#$%^&*'
    ) {
        $str = '';
        $max = mb_strlen($keyspace, '8bit') - 1;
        if ($max < 1) {
            throw new Exception('$keyspace must be at least two characters long');
        }
        for ($i = 0; $i < $length; ++$i) {
            $str .= $keyspace[random_int(0, $max)];
        }
        return $str;
    }
    $password = random_str($r_number);
    echo $password;
?>

在这里四肢着地,但是...

如果生成的密码恰好包含<(默认$keyspace),并且您正在浏览器中查看结果,则该<将被视为 HTML 标记的开头,并且不会显示,也不会显示它之后的任何内容,除非碰巧选择了>

这是我唯一能想到的会导致这种情况的事情。尝试echo htmlspecialchars($password);输出它。

最新更新