PHP 生成随机密码

PHP 生成随机字符串

PHP 生成随机密码

使用 PHP 开发应用程序, 尤其是网站程序, 常常需要生成随机密码, 如用户注册生成随机密码, 用户重置密码也需要生成一个随机的密码。随机密码也就是一串固定长度的字符串, 这里我收集整理了几种生成随机字符串的方法, 以供大家参考。

通过预设字符集生成随机密码

  1. 设置一个包含所需字符的字符串 $chars, 例如: a-zA-Z0-9 以及特殊字符
  2. $chars 字符串中随机取一个字符
  3. 重复第二步 n 次, 可得长度为 n 的密码
function generate_password($length = 8) {
    // 密码字符集, 可任意添加你需要的字符
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ []{}<>~`+=,.;:/?|';
    $password = '';
    for ($i = 0; $i < $length; $i++) {
        // 这里提供两种字符获取方式
        // 第一种是使用 substr 截取$chars中的任意一位字符;
        // 第二种是取字符数组 $chars 的任意元素
        // $password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
        $password .= $chars[mt_rand(0, strlen($chars) - 1)];
    }
    return $password;
}

简化字符集生成随机密码

我自己再用的

  1. 设置包含部分字符的 $chars, 如: a-z0-9
  2. 随机从 $chars 中选择字符构建密码
function genPassword($length = 8) {
    $chars = 'abcdefghijklmnopqrstuvwxyz123456789';
    $password = '';
    for ($i = 0; $i < $length; $i++) {
        $password .= $chars[mt_rand(0, strlen($chars) - 1)];
    }
    return $password;
}

基于当前时间戳生成密码

  1. 使用 time() 函数获取当前时间戳
  2. 将时间戳进行 md5 加密
  3. 截取加密后的字符串截取 n 位即得想要的密码
function get_password($length = 8) {
    $str = substr(md5(time()), 0, $length);
    return $str;
}

性能测试

使用微秒计时来比较不同随机密码生成方法的运行效率

function getmicrotime() {
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}

// 记录开始时间
$time_start = getmicrotime();

// 这里放要执行的 PHP 代码
// echo generate_password(6);

// 记录结束时间
$time_end = getmicrotime();
$time = $time_end - $time_start;

// 输出执行时间
echo "执行时间 $time seconds";

原文

PHP生成随机密码的4种方法及性能对比

最后更新于 2019-06-05
使用 Hugo 构建
主题 StackJimmy 设计