PHP 生成随机密码
PHP 生成随机密码
注册、重置密码功能经常要生成随机密码,这几种方法要会。
1. 简单随机字符串
function generatePassword($length = 8) {
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$password = '';
for ($i = 0; $i < $length; $i++) {
$password .= $chars[mt_rand(0, strlen($chars) - 1)];
}
return $password;
}
// 生成8位密码
echo generatePassword(8);
2. 带特殊字符的密码
function generateStrongPassword($length = 12) {
$lower = 'abcdefghijklmnopqrstuvwxyz';
$upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$numbers = '0123456789';
$special = '!@#$%^&*()';
$all = $lower . $upper . $numbers . $special;
$password = '';
// 确保至少包含每种字符
$password .= $lower[mt_rand(0, strlen($lower) - 1)];
$password .= $upper[mt_rand(0, strlen($upper) - 1)];
$password .= $numbers[mt_rand(0, strlen($numbers) - 1)];
$password .= $special[mt_rand(0, strlen($special) - 1)];
// 剩余随机
for ($i = 4; $i < $length; $i++) {
$password .= $all[mt_rand(0, strlen($all) - 1)];
}
// 打乱顺序
return str_shuffle($password);
}
echo generateStrongPassword(12);
3. 更安全的 random_bytes
PHP 7+ 推荐用 random_bytes,更安全:
function generateSecurePassword($length = 12) {
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*';
$max = strlen($chars) - 1;
$password = '';
for ($i = 0; $i < $length; $i++) {
$password .= $chars[random_int(0, $max)];
}
return $password;
}
echo generateSecurePassword(16);
4. 生成验证码
function generateCode($length = 6) {
$chars = '0123456789';
$code = '';
for ($i = 0; $i < $length; $i++) {
$code .= $chars[random_int(0, 9)];
}
return $code;
}
// 6位数字验证码
echo generateCode(6);
5. 生成随机 Token
function generateToken($length = 32) {
return bin2hex(random_bytes($length / 2));
}
// 32位随机token
echo generateToken();
6. 安全建议
1)用 random_int 不用 mt_rand
- random_int 是密码安全随机数
- mt_rand 不够安全
2)密码长度
- 普通密码:8-12位
- 强密码:12位以上
- Token:32位以上
3)密码强度
- 大小写字母+数字+特殊字符
- 避免纯数字或纯字母
4)不要自己写随机算法
- 用 PHP 内置函数
- 不要用时间戳做随机种子
总结
PHP 生成随机密码要点:
- 简单密码用 mt_rand 拼接
- 强密码包含大小写+数字+特殊字符
- 安全密码用 random_int
- Token 用 bin2hex(random_bytes())
- 验证码用纯数字
- 推荐用 PHP 7+ 的 random_int
- 不要自己写随机算法
做用户系统,生成密码和验证码是必备功能。