php代码示例怎么生成随机密码_php生成随机密码代码示例【示例】
发布时间 - 2026-01-27 00:00:00 点击率:次应使用 random_bytes() 生成密码学安全随机字节,再映射为大小写字母加数字的字符串;避免 rand() 或 mt_rand(),因其不安全;12位密码熵值约71 bit,兼顾安全性与可用性。
PHP 生成安全随机密码,别用 rand() 或 mt_rand() 拼字符串 —— 它们不满足密码学安全要求,容易被预测。
用 random_bytes() 生成真正随机字节
这是 PHP 7+ 提供的密码学安全随机数生成函数,底层调用操作系统 CSPRNG(如 /dev/urandom 或 CryptGenRandom),适合生成密钥、token、密码等敏感值。
- 必须配合
bin2hex()、base64_encode()或自定义字符映射使用,因为random_bytes()返回的是二进制数据,不能直接当密码用 - 长度参数传的是字节数,不是最终密码字符数;比如
random_bytes(16)→ hex 后是 32 位字符串 - 若发生系统 RNG 不可用(极罕见),会抛出
Exception,建议简单包裹try/catch
生成含大小写字母 + 数字的 12 位密码
避免可读性差的符号(如 !@#$%)导致用户输入错误或 URL 编码问题,同时保证熵值足够(12 位 × log₂(62) ≈ 71 bit)。
function generatePassword($length = 12) {
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

$bytes = random_bytes($length);
$password = '';
for ($i = 0; $i < $length; $i++) {
$password .= $chars[$bytes[$i] % strlen($chars)];
}
return $password;
}
- 这里用
$bytes[$i] % strlen($chars)是安全的模运算:即使$bytes值很大,分布仍近似均匀(偏差可忽略) - 不要用
str_shuffle(str_repeat($chars, 5))+substr()——str_shuffle()基于rand(),不安全 - 若需排除易混淆字符(如
0O1lI),应在$chars字符串中提前剔除,而不是事后过滤
生成带符号的密码(如用于 API Key)
如果场景允许使用符号(例如后端服务间认证),可扩展字符集,但注意 URL 安全性和 Shell 解析风险。
立即学习“PHP免费学习笔记(深入)”;
- 推荐用
base64_encode(random_bytes(18))得到 24 字符 Base64 字符串(含+、/、=),但需替换为 URL 安全变体:strtr($s, '+/', '-_') - 若坚持用自定义符号集(如
.-_~),确保总字符数仍是 2⁸ 的约数(如 64),否则模偏差会变大 - 避免使用
openssl_random_pseudo_bytes()—— 已废弃,且旧版本可能 fallback 到非安全模式
真正要注意的不是“怎么拼出一串字符”,而是“每个字符是否独立、均匀、不可预测”。哪怕只漏掉一次 try/catch 或误用 rand(),整个密码机制就形同虚设。
# php
# word
# 操作系统
# 编码
# 字节
# ssl
# 后端
# strlen
# try
# catch
# Token
# 字符串
# Chars
# 的是
# 自定义
# 不安全
# 这是
# 随机数
# 形同虚设
# 可用性
# 要注意
# 仍是
# 应在
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在IIS中配置站点IP、端口及主机头?
jquery插件bootstrapValidator表单验证详解
敲碗10年!Mac系列传将迎来「触控与联网」双革新
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
网站图片在线制作软件,怎么在图片上做链接?
canvas 画布在主流浏览器中的尺寸限制详细介绍
Linux系统命令中tree命令详解
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
Laravel如何创建自定义Facades?(详细步骤)
Python并发异常传播_错误处理解析【教程】
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
Laravel定时任务怎么设置_Laravel Crontab调度器配置
高防服务器租用如何选择配置与防御等级?
动图在线制作网站有哪些,滑动动图图集怎么做?
如何获取上海专业网站定制建站电话?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
长沙企业网站制作哪家好,长沙水业集团官方网站?
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
Laravel如何使用查询构建器?(Query Builder高级用法)
Python文件异常处理策略_健壮性说明【指导】
Android okhttputils现在进度显示实例代码
使用spring连接及操作mongodb3.0实例
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
如何快速查询网站的真实建站时间?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
公司网站制作价格怎么算,公司办个官网需要多少钱?
js实现获取鼠标当前的位置
原生JS获取元素集合的子元素宽度实例
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
Laravel如何优化应用性能?(缓存和优化命令)
如何在Windows虚拟主机上快速搭建网站?
Python3.6正式版新特性预览
如何快速启动建站代理加盟业务?
iOS验证手机号的正则表达式
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
如何有效防御Web建站篡改攻击?
Laravel storage目录权限问题_Laravel文件写入权限设置
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
香港网站服务器数量如何影响SEO优化效果?
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
如何用低价快速搭建高质量网站?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
如何在IIS中新建站点并配置端口与物理路径?
android nfc常用标签读取总结


