我使用random_int
生成密码,但我注意到一些奇怪的东西。有时(纯粹随机),它会生成小于最小值的密码。例如,我设置了10
和15
限制,每经过约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;
?>
答案 0 :(得分:5)
在这里继续前行,但是......
如果生成的密码恰好包含<
- 您的默认$keyspace
- 并且您正在浏览器中查看结果,那么<
将被视为除非恰好选择>
,否则不会显示HTML标记,也不会显示任何内容。
这是我能想到的唯一能引起这种情况的事情。请尝试echo htmlspecialchars($password);
输出。