PHP生成随机密码的4种方法及性能对比_PHP教程
PHP生成随机密码的4种方法及性能对比
使用PHP开发应用程序,尤其是网站程序,常常需要生成随机密码,如用户注册生成随机密码,用户重置密码也需要生成一个随机的密码。随机密码也就是一串固定长度的字符串,这里我收集整理了几种生成随机字符串的方法,以供大家参考。
方法一:
1、在 33 – 126 中生成一个随机整数,如 35,
2、将 35 转换成对应的ASCII码字符,如 35 对应 #
3、重复以上 1、2 步骤 n 次,连接成 n 位的密码
该算法主要用到了两个函数,mt_rand ( int $min , int $max )函数用于生成随机整数,其中 $min – $max 为 ASCII 码的范围,这里取 33 -126 ,可以根据需要调整范围,如ASCII码表中 97 – 122 位对应 a – z 的英文字母,具体可参考 ASCII码表; chr ( int $ascii )函数用于将对应整数 $ascii 转换成对应的字符。
view sourceprint?
<ol class="dp-c"><li class="alt"><span><span class="keyword">function</span><span> create_password(</span><span class="vars">$pw_length</span><span> = 8) </span></span></li><li><span>{ </span></li><li class="alt"><span> <span class="vars">$randpwd</span><span> = </span><span class="string">''</span><span>; </span></span></li><li><span> <span class="keyword">for</span><span> (</span><span class="vars">$i</span><span> = 0; </span><span class="vars">$i</span><span> < </span><span class="vars">$pw_length</span><span>; </span><span class="vars">$i</span><span>++) </span></span></li><li class="alt"><span> { </span></li><li><span> <span class="vars">$randpwd</span><span> .= </span><span class="func">chr</span><span>(mt_rand(33, 126)); </span></span></li><li class="alt"><span> } </span></li><li><span> <span class="keyword">return</span><span> </span><span class="vars">$randpwd</span><span>; </span></span></li><li class="alt"><span>} </span></li><li><span> </span></li><li class="alt"><span><span class="comment">// 调用该函数,传递长度参数$pw_length = 6</span><span> </span></span></li><li><span><span class="func">echo</span><span> create_password(6); </span></span></li></ol>
方法二:
1、预置一个的字符串 $chars ,包括 a – z,A – Z,0 – 9,以及一些特殊字符
2、在 $chars 字符串中随机取一个字符
3、重复第二步 n 次,可得长度为 n 的密码
view sourceprint?
<ol class="dp-c"><li class="alt"><span><span class="keyword">function</span><span> generate_password( </span><span class="vars">$length</span><span> = 8 ) { </span></span></li><li><span> <span class="comment">// 密码字符集,可任意添加你需要的字符</span><span> </span></span></li><li class="alt"><span> <span class="vars">$chars</span><span> = </span><span class="string">'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ []{}<>~`+=,.;:/?|'</span><span>; </span></span></li><li><span> </span></li><li class="alt"><span> <span class="vars">$password</span><span> = </span><span class="string">''</span><span>; </span></span></li><li><span> <span class="keyword">for</span><span> ( </span><span class="vars">$i</span><span> = 0; </span><span class="vars">$i</span><span> < </span><span class="vars">$length</span><span>; </span><span class="vars">$i</span><span>++ ) </span></span></li><li class="alt"><span> { </span></li><li><span> <span class="comment">// 这里提供两种字符获取方式</span><span> </span></span></li><li class="alt"><span> <span class="comment">// 第一种是使用 substr 截取$chars中的任意一位字符;</span><span> </span></span></li><li><span> <span class="comment">// 第二种是取字符数组 $chars 的任意元素</span><span> </span></span></li><li class="alt"><span> <span class="comment">// $password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);</span><span> </span></span></li><li><span> <span class="vars">$password</span><span> .= </span><span class="vars">$chars</span><span>[ mt_rand(0, </span><span class="func">strlen</span><span>(</span><span class="vars">$chars</span><span>) - 1) ]; </span></span></li><li class="alt"><span> } </span></li><li><span> </span></li><li class="alt"><span> <span class="keyword">return</span><span> </span><span class="vars">$password</span><span>; </span></span></li><li><span>} </span></li></ol>
方法三:
1、预置一个的字符数组 $chars ,包括 a – z,A – Z,0 – 9,以及一些特殊字符
2、通过array_rand()从数组 $chars 中随机选出 $length 个元素
3、根据已获取的键名数组 $keys,从数组 $chars 取出字符拼接字符串。该方法的缺点是相同的字符不会重复取。
view sourceprint?
<ol class="dp-c"><li class="alt"><span><span class="keyword">function</span><span> make_password( </span><span class="vars">$length</span><span> = 8 ) </span></span></li><li><span>{ </span></li><li class="alt"><span> <span class="comment">// 密码字符集,可任意添加你需要的字符</span><span> </span></span></li><li><span> <span class="vars">$chars</span><span> = </span><span class="keyword">array</span><span>(</span><span class="string">'a'</span><span>, </span><span class="string">'b'</span><span>, </span><span class="string">'c'</span><span>, </span><span class="string">'d'</span><span>, </span><span class="string">'e'</span><span>, </span><span class="string">'f'</span><span>, </span><span class="string">'g'</span><span>, </span><span class="string">'h'</span><span>, </span></span></li><li class="alt"><span> <span class="string">'i'</span><span>, </span><span class="string">'j'</span><span>, </span><span class="string">'k'</span><span>, </span><span class="string">'l'</span><span>,</span><span class="string">'m'</span><span>, </span><span class="string">'n'</span><span>, </span><span class="string">'o'</span><span>, </span><span class="string">'p'</span><span>, </span><span class="string">'q'</span><span>, </span><span class="string">'r'</span><span>, </span><span class="string">'s'</span><span>, </span></span></li><li><span> <span class="string">'t'</span><span>, </span><span class="string">'u'</span><span>, </span><span class="string">'v'</span><span>, </span><span class="string">'w'</span><span>, </span><span class="string">'x'</span><span>, </span><span class="string">'y'</span><span>,</span><span class="string">'z'</span><span>, </span><span class="string">'A'</span><span>, </span><span class="string">'B'</span><span>, </span><span class="string">'C'</span><span>, </span><span class="string">'D'</span><span>, </span></span></li><li class="alt"><span> <span class="string">'E'</span><span>, </span><span class="string">'F'</span><span>, </span><span class="string">'G'</span><span>, </span><span class="string">'H'</span><span>, </span><span class="string">'I'</span><span>, </span><span class="string">'J'</span><span>, </span><span class="string">'K'</span><span>, </span><span class="string">'L'</span><span>,</span><span class="string">'M'</span><span>, </span><span class="string">'N'</span><span>, </span><span class="string">'O'</span><span>, </span></span></li><li><span> <span class="string">'P'</span><span>, </span><span class="string">'Q'</span><span>, </span><span class="string">'R'</span><span>, </span><span class="string">'S'</span><span>, </span><span class="string">'T'</span><span>, </span><span class="string">'U'</span><span>, </span><span class="string">'V'</span><span>, </span><span class="string">'W'</span><span>, </span><span class="string">'X'</span><span>, </span><span class="string">'Y'</span><span>,</span><span class="string">'Z'</span><span>, </span></span></li><li class="alt"><span> <span class="string">'0'</span><span>, </span><span class="string">'1'</span><span>, </span><span class="string">'2'</span><span>, </span><span class="string">'3'</span><span>, </span><span class="string">'4'</span><span>, </span><span class="string">'5'</span><span>, </span><span class="string">'6'</span><span>, </span><span class="string">'7'</span><span>, </span><span class="string">'8'</span><span>, </span><span class="string">'9'</span><span>, </span><span class="string">'!'</span><span>, </span></span></li><li><span> <span class="string">'@'</span><span>,</span><span class="string">'#'</span><span>, </span><span class="string">'$'</span><span>, </span><span class="string">'%'</span><span>, </span><span class="string">'^'</span><span>, </span><span class="string">'&'</span><span>, </span><span class="string">'*'</span><span>, </span><span class="string">'('</span><span>, </span><span class="string">')'</span><span>, </span><span class="string">'-'</span><span>, </span><span class="string">'_'</span><span>, </span></span></li><li class="alt"><span> <span class="string">'['</span><span>, </span><span class="string">']'</span><span>, </span><span class="string">'{'</span><span>, </span><span class="string">'}'</span><span>, </span><span class="string">'<'</span><span>, </span><span class="string">'>'</span><span>, </span><span class="string">'~'</span><span>, </span><span class="string">'`'</span><span>, </span><span class="string">'+'</span><span>, </span><span class="string">'='</span><span>, </span><span class="string">','</span><span>, </span></span></li><li><span> <span class="string">'.'</span><span>, </span><span class="string">';'</span><span>, </span><span class="string">':'</span><span>, </span><span class="string">'/'</span><span>, </span><span class="string">'?'</span><span>, </span><span class="string">'|'</span><span>); </span></span></li><li class="alt"><span> </span></li><li><span> <span class="comment">// 在 $chars 中随机取 $length 个数组元素键名</span><span> </span></span></li><li class="alt"><span> <span class="vars">$keys</span><span> = </span><span class="func">array_rand</span><span>(</span><span class="vars">$chars</span><span>, </span><span class="vars">$length</span><span>); </span></span></li><li><span> </span></li><li class="alt"><span> <span class="vars">$password</span><span> = </span><span class="string">''</span><span>; </span></span></li><li><span> <span class="keyword">for</span><span>(</span><span class="vars">$i</span><span> = 0; </span><span class="vars">$i</span><span> < </span><span class="vars">$length</span><span>; </span><span class="vars">$i</span><span>++) </span></span></li><li class="alt"><span> { </span></li><li><span> <span class="comment">// 将 $length 个数组元素连接成字符串</span><span> </span></span></li><li class="alt"><span> <span class="vars">$password</span><span> .= </span><span class="vars">$chars</span><span>[</span><span class="vars">$keys</span><span>[</span><span class="vars">$i</span><span>]]; </span></span></li><li><span> } </span></li><li class="alt"><span> </span></li><li><span> <span class="keyword">return</span><span> </span><span class="vars">$password</span><span>; </span></span></li><li class="alt"><span>} </span></li></ol>
方法四:
本方法是本文被蓝色理想转载后,一名网友提供的一个新方法,算法简单,代码简短,只是因为md5()函数的返回值的缘故,生成的密码只包括字母和数字,不过也算是一个不错的方法。算法思想:
1、time() 获取当前的 Unix 时间戳
2、将第一步获取的时间戳进行 md5() 加密
3、将第二步加密的结果,截取 n 位即得想要的密码
view sourceprint?
<ol class="dp-c"><li class="alt"><span><span class="keyword">function</span><span> get_password( </span><span class="vars">$length</span><span> = 8 ) </span></span></li><li><span>{ </span></li><li class="alt"><span> <span class="vars">$str</span><span> = </span><span class="func">substr</span><span>(md5(time()), 0, 6); </span></span></li><li><span> <span class="keyword">return</span><span> </span><span class="vars">$str</span><span>; </span></span></li><li class="alt"><span>} </span></li></ol>
时间效率对比
我们使用以下PHP代码,计算上面的 4 个随机密码生成函数生成 6 位密码的运行时间,进而对他们的时间效率进行一个简单的对比。
view sourceprint?
<ol class="dp-c"><li class="alt"><span><span><?php </span></span></li><li><span><span class="keyword">function</span><span> getmicrotime() </span></span></li><li class="alt"><span>{ </span></li><li><span> list(<span class="vars">$usec</span><span>, </span><span class="vars">$sec</span><span>) = </span><span class="func">explode</span><span>(</span><span class="string">" "</span><span>,microtime()); </span></span></li><li class="alt"><span> <span class="keyword">return</span><span> ((float)</span><span class="vars">$usec</span><span> + (float)</span><span class="vars">$sec</span><span>); </span></span></li><li><span>} </span></li><li class="alt"><span> </span></li><li><span><span class="comment">// 记录开始时间</span><span> </span></span></li><li class="alt"><span><span class="vars">$time_start</span><span> = getmicrotime(); </span></span></li><li><span> </span></li><li class="alt"><span><span class="comment">// 这里放要执行的PHP代码,如:</span><span> </span></span></li><li><span><span class="comment">// echo create_password(6);</span><span> </span></span></li><li class="alt"><span> </span></li><li><span><span class="comment">// 记录结束时间</span><span> </span></span></li><li class="alt"><span><span class="vars">$time_end</span><span> = getmicrotime(); </span></span></li><li><span><span class="vars">$time</span><span> = </span><span class="vars">$time_end</span><span> - </span><span class="vars">$time_start</span><span>; </span></span></li><li class="alt"><span> </span></li><li><span> <span class="comment">// 输出运行总时间 </span><span> </span></span></li><li class="alt"><span><span class="func">echo</span><span> </span><span class="string">"执行时间 $time seconds"</span><span>; </span></span></li><li><span>?> </span></li></ol>
最终得出的结果是:
方法一:9.8943710327148E-5 秒
方法二:9.6797943115234E-5 秒
方法三:0.00017499923706055 秒
方法四:3.4093856811523E-5 秒
可以看出方法一和方法二的执行时间都差不多,方法四运行时间最短,而方法三的运行时间稍微长点。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

如果您是一位经验丰富的 PHP 开发人员,您可能会感觉您已经在那里并且已经完成了。您已经开发了大量的应用程序,调试了数百万行代码,并调整了一堆脚本来实现操作

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

PHP的魔法方法有哪些?PHP的魔法方法包括:1.\_\_construct,用于初始化对象;2.\_\_destruct,用于清理资源;3.\_\_call,处理不存在的方法调用;4.\_\_get,实现动态属性访问;5.\_\_set,实现动态属性设置。这些方法在特定情况下自动调用,提升代码的灵活性和效率。
