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

方法一:

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 source

print?

01.function create_password($pw_length = 8)

02.{

03.$randpwd ‘‘;

04.for ($i = 0; $i $pw_length$i++)

05.{

06.$randpwd .= chr(mt_rand(33, 126));

07.}

08.return $randpwd;

09.}

10.

11.// 调用该函数,传递长度参数$pw_length = 6

12.echo create_password(6);

方法二:

1、预置一个的字符串 $chars ,包括 a – z,A – Z,0 – 9,以及一些特殊字符

2、在 $chars 字符串中随机取一个字符

3、重复第二步 n 次,可得长度为 n 的密码

view source

print?

01.function generate_password( $length = 8 ) {

02.// 密码字符集,可任意添加你需要的字符

03.$chars ‘[email protected]#$%^&*()-_ []{}<>~`+=,.;:/?|‘;

04.

05.$password ‘‘;

06.for $i = 0; $i $length$i++ )

07.{

08.// 这里提供两种字符获取方式

09.// 第一种是使用 substr 截取$chars中的任意一位字符;

10.// 第二种是取字符数组 $chars 的任意元素

11.// $password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);

12.$password .= $chars[ mt_rand(0, strlen($chars) - 1) ];

13.}

14.

15.return $password;

16.}

方法三:

1、预置一个的字符数组 $chars ,包括 a – z,A – Z,0 – 9,以及一些特殊字符

2、通过array_rand()从数组 $chars 中随机选出 $length 个元素

3、根据已获取的键名数组 $keys,从数组 $chars 取出字符拼接字符串。该方法的缺点是相同的字符不会重复取。

view source

print?

01.function make_password( $length = 8 )

02.{

03.// 密码字符集,可任意添加你需要的字符

04.$chars array(‘a‘‘b‘‘c‘‘d‘‘e‘‘f‘‘g‘‘h‘,

05.‘i‘‘j‘‘k‘‘l‘,‘m‘‘n‘‘o‘‘p‘‘q‘‘r‘‘s‘,

06.‘t‘‘u‘‘v‘‘w‘‘x‘‘y‘,‘z‘‘A‘‘B‘‘C‘‘D‘,

07.‘E‘‘F‘‘G‘‘H‘‘I‘‘J‘‘K‘‘L‘,‘M‘‘N‘‘O‘,

08.‘P‘‘Q‘‘R‘‘S‘‘T‘‘U‘‘V‘‘W‘‘X‘‘Y‘,‘Z‘,

09.‘0‘‘1‘‘2‘‘3‘‘4‘‘5‘‘6‘‘7‘‘8‘‘9‘‘!‘,

10.‘@‘,‘#‘‘$‘‘%‘‘^‘‘&‘‘*‘‘(‘‘)‘‘-‘‘_‘,

11.‘[‘‘]‘‘{‘‘}‘‘<‘‘>‘‘~‘‘`‘‘+‘‘=‘‘,‘,

12.‘.‘‘;‘‘:‘‘/‘‘?‘‘|‘);

13.

14.// 在 $chars 中随机取 $length 个数组元素键名

15.$keys array_rand($chars$length);

16.

17.$password ‘‘;

18.for($i = 0; $i $length$i++)

19.{

20.// 将 $length 个数组元素连接成字符串

21.$password .= $chars[$keys[$i]];

22.}

23.

24.return $password;

25.}

方法四:

本方法是本文被蓝色理想转载后,一名网友提供的一个新方法,算法简单,代码简短,只是因为md5()函数的返回值的缘故,生成的密码只包括字母和数字,不过也算是一个不错的方法。算法思想:

1、time() 获取当前的 Unix 时间戳

2、将第一步获取的时间戳进行 md5() 加密

3、将第二步加密的结果,截取 n 位即得想要的密码

view source

print?

1.function get_password( $length = 8 )

2.{

3.$str substr(md5(time()), 0, 6);

4.return $str;

5.}

时间效率对比

我们使用以下PHP代码,计算上面的 4 个随机密码生成函数生成 6 位密码的运行时间,进而对他们的时间效率进行一个简单的对比。

view source

print?

01.<?php

02.function getmicrotime()

03.{

04.list($usec$sec) = explode(" ",microtime());

05.return ((float)$usec + (float)$sec);

06.}

07.

08.// 记录开始时间

09.$time_start = getmicrotime();

10.

11.// 这里放要执行的PHP代码,如:

12.// echo create_password(6);

13.

14.// 记录结束时间

15.$time_end = getmicrotime();

16.$time $time_end $time_start;

17.

18.// 输出运行总时间

19.echo "执行时间 $time seconds";

20.?>

最终得出的结果是:

方法一:9.8943710327148E-5 秒

方法二:9.6797943115234E-5 秒

方法三:0.00017499923706055 秒

方法四:3.4093856811523E-5 秒

可以看出方法一和方法二的执行时间都差不多,方法四运行时间最短,而方法三的运行时间稍微长点。

                                               

                                             转载于:露兜博客

时间: 2024-08-17 01:12:19

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

php生成随机密码的几种方法

文章来源:PHP开发学习门户 地址:http://www.phpthinking.com/archives/523 使用PHP开发应用程序,尤其是网站程序,常常需要生成随机密码,如用户注册生成随机密码,用户重置密码也需要生成一个随机的密码.随机密码也就是一串固定长度的字符串,这里我收集整理了几种生成随机字符串的方法,以供大家参考. 方法一: 1.在 33 – 126 中生成一个随机整数,如 35, 2.将 35 转换成对应的ASCII码字符,如 35 对应 # 3.重复以上 1.2 步骤 n 次

MySQL查询随机数据的4种方法和性能对比

从MySQL随机选取数据也是我们最常用的一种发发,其最简单的办法就是使用”ORDER BY RAND()”,本文介绍了包括ORDER BY RAND()的4种获取随机数据的方法,并分析了各自的优缺点. 下面从以下四种方案分析各自的优缺点.方案一: 复制代码 代码如下: SELECT * FROM `table` ORDER BY RAND() LIMIT 0,1; 这种方法的问题就是非常慢.原因是因为MySQL会创建一张零时表来保存所有的结果集,然后给每个结果一个随机索引,然后再排序并返回.有几

利用 Linux 系统生成随机密码的10种方法

通常情况下大家生成密码都好困惑,一来复杂程度不够会不安全,复杂程度够了又不能手动随便敲击键盘打出一同字符(但通常情况下这些字符是有规律的),使用1password 或者 keepass 这种软件生成也可以,不过貌似1password 要收费,既然这样我们就玩一下好玩的用 linux 来生成随机密码玩玩吧; Linux操作系统的一大优点是对于同样一件事情,你可以使用高达数百种方法来实现它.例如,你可以通过数十种方法来生成随机密码.本文将介绍生成随机密码的十种方法. 1. 使用SHA算法来加密日期,

Linux中生成密钥的两种方法

Linux中生成密钥的两种方法 SSH服务支持一种安全认证机制,即密钥认证.所谓的密钥认证,实际上是使用一对加密字符串,一个称为公钥(publickey), 任何人都可以看到其内容,用于加密:另一个称为密钥(privatekey),只有拥有者才能看到,用于解密.通过公钥加密过的密文使用密钥可以轻松解密,但根据公钥来猜测密钥却十分困难. ssh的密钥认证就是使用了这一特性.服务器和客户端都各自拥有自己的公钥和密钥.如何使用密钥认证登录linux服务器呢? 在使用密钥认证远程登入linux之前,我们

PHP生成随机数的两种方法

这里整理了php生成随机数的二种方法,入门级的php随机数生成代码.: 第一种方法,使用系统自带的函数: srand((double)microtime()*1000000); //随机产生0-99之间的整数 $randval=rand(0,99999999); echo $randval,''; 第二种方法,不只是生成只有数字的随机字符串,更包括了各种特殊字符: function randomkeys($length){ $output=''; for($a=0;$a<$length; $a+

php生成随机数的三种方法

php生成随机数的三种方法 如何用php生成1-10之间的不重复随机数? 例1,使用shuffle函数生成随机数. <?php$arr=range(1,10);shuffle($arr);foreach($arr as $values){  echo $values." ";}?> 例2,使用array_unique函数生成随机数. <?php$arr=array();while(count($arr)<10){  $arr[]=rand(1,10);  $ar

javascript生成对象的三种方法

/** js生成对象的三种方法*/ // 1.通过new Object,然后添加属性 示例如下: var people1 = new Object(); people1.name = 'xiaohailong01'; people1.age = 31; alert("name:" + people1.name + ", age:" + people1.age); // 2.直接接收json数据生成 var people2 = { name : 'xiaohailon

使用httpclient实现http链接池与使用HttpURLConnection发送http请求的方法与性能对比

使用httpclient实现http链接池与使用HttpURLConnection发送http请求的方法与性能对比 在项目中需要使用http调用接口,实现了两套发送http请求的方法,一个是使用apache的httpclient提供的http链接池来发送http请求,另一个是使用java原生的HttpURLConnection来发送http请求,并对两者性能进行了对比. 使用httpclient中的链接池发送http请求 使用最新的4.5.2版httpclient进行实现.在maven中引入 <

利用Linux系统生成随机密码的10种方法

Linux操作系统的一大优点是对于同样一件事情,你可以使用高达数百种方法来实现它.例如,你可以通过数十种方法来生成随机密码.本文将介绍生成随机密码的十种方法. 1. 使用SHA算法来加密日期,并输出结果的前32个字符: date +%s |sha256sum |base64 |head -c 32 ;echo 生成结果如下: ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4 2. 使用内嵌的/dev/urandom,并过滤掉那些日常不怎么使用的字符.这里也只输出结果的前32个字符