在PHP中生成随机密码

234

我试图在PHP中生成随机密码。

然而,我得到的都是 'a',返回类型是数组类型,而我想要它是字符串类型。有什么办法可以纠正代码吗?

谢谢。

function randomPassword() {
    $alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
    for ($i = 0; $i < 8; $i++) {
        $n = rand(0, count($alphabet)-1);
        $pass[$i] = $alphabet[$n];
    }
    return $pass;
}

9
所有答案都没有使用安全的随机数生成器,而你需要它来生成密码。 - Scott Arciszewski
4
访客应该从一个可以适当更新的来源获取可能与安全有关的信息,而不是一个关闭了新回答的问题。我正在删除重复问题的答案,这样访客就会读到开放问题的答案。如果这个问题被重新打开,答案将被恢复。 - Jeremy
6
在这个问题中,没有明确说明需要使用“密码学安全的”密码。对于一些人来说,使用“/dev/random”的答案已经足够了,因为问题并没有要求一个“安全”的密码(也不应该被编辑以包含它,因为那样会改变原问题的意思)。虽然我非常支持安全性,但我认为这种方式并没有充分考虑。就像使用“mysql_”一样,这些答案仍然有效,但应该标记为不安全。也许这是SO需要包含的额外软件--能够警告*不安全的代码的能力? - Jimbo
6
@JeremyBanks 你能否恢复这个问题的答案?仅仅因为它是一个重复问题并不意味着答案是错误的(我不小心投票重新打开了,我同意这是一个重复问题)。删除答案没有任何意义,考虑将此问题删除并将答案迁移到其他问题上(我以前见过这样做)。 - Naftali
7
如果你想让某个东西不再重新开放,那么锁定它。否则99%的人都会重新开放它,并制造一堆麻烦。就我个人而言,我完全不同意这样随意删除得分高的答案,但也不能与你为此而争论。 - Shadow The Spring Wizard
显示剩余9条评论
32个回答

0
private function generatePassword(): string
{
    return Arr::join(
        Arr::shuffle(
            Arr::collapse([
                Arr::random(range(0, 9), 3),
                Arr::random(range('A', 'Z'), 3),
                Arr::random(range('a', 'z'), 3),
                Arr::random(['@', '#', '$', '!', '%', '*', '?', '&'], 3)
            ])
        )
        , ''
    );
}

-1
function password_generate($n, $l, $s) 
{
  $numbers = '1234567890';
  $letters = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcefghijklmnopqrstuvwxyz';
  $special = '--!=!@@#++%';
  return substr(str_shuffle($numbers), 0, $n).substr(str_shuffle($letters), 0, $l).substr(str_shuffle($special), 0, $s);
}

echo password_generate(2,9,1);

为了生成密码,只应使用安全的随机生成器,例如random_bytesrandom_int。许多其他用于生成随机值的解决方案,包括涉及time()microtime()uniqid()rand()mt_rand()str_shuffle()array_rand()shuffle()的解决方案,更加可预测,并且如果随机字符串将用作密码或另一个秘密值,则不适合使用。请参见:https://dev59.com/UVPTa4cB1Zd3GeqPfgi6#64472183 - Peter O.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接