微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 PHP 中生成安全的随机密码

如何解决在 PHP 中生成安全的随机密码

我制作了一个生成随机密码的 PHP 函数。 但是,有时,密码长度与我想要的不同(我将其固定为 10),我不明白为什么? 如果可能的话,我希望密码不要以特殊字符开头。 你能帮我吗?

<?PHP
    function get_random_password() {
        $digits = range('0','9');
        $lowercase = range('a','z');
        $uppercase = range('A','Z'); 
        $special = str_split('!@#$%^&*+=-_?.,:;<>(){}[]/|~`\'"');
        shuffle($digits);
        shuffle($special);
        shuffle($lowercase);
        shuffle($uppercase);
        $array_special = array_rand($special);
        $array_digits = array_rand($digits,3);
        $array_lowercase = array_rand($lowercase,3);
        $array_uppercase = array_rand($uppercase,3);
        $password = str_shuffle(
            $special[$array_special].
            $digits[$array_digits[0]].
            $digits[$array_digits[1]].
            $digits[$array_digits[2]].
            $lowercase[$array_lowercase[0]].
            $lowercase[$array_lowercase[1]].
            $lowercase[$array_lowercase[2]].
            $uppercase[$array_uppercase[0]].
            $uppercase[$array_uppercase[1]].
            $uppercase[$array_uppercase[2]]
        );
        if (strlen($password) > 10) {
            $password = substr($password,10);
        }
        return $password;
    }
    for ($i=0;$i<=30;$i++) {
        echo get_random_password()."<br>";
    }
?>

enter image description here

解决方法

我多次运行您的代码。它总是返回长度为 10 个字符的密码。

我看到以下问题:

  • 您将其打印为 html,因此 <> 之类的字符可能会破坏您的 html 代码
  • 换行也可能是个问题

解决这个问题:

  • 不要在浏览器中打印出来,最好在控制台中测试您的功能。
  • 如果你想把它打印成html,那么你必须使用htmlentities() (PHP documentation) 函数才能在浏览器中正确显示它。不要不要使用 htmlentities() 存储密码,因为这会将密码中的特殊字符替换为 html 实体。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。