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常用标签读取总结