当前位置: 首页 > 科技观察

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

时间:2023-03-20 02:26:38 科技观察

4PHP生成随机密码的方法及性能比较随机密码是一串固定长度的字符串。这里我收集整理了几种生成随机字符串的方法,供大家参考。方法一:1.生成一个33-126之间的随机整数,比如35,2.把35转换成对应的ASCII码字符,比如35对应#3,重复上面的步骤1和2n次,连接起来inton-digit密码算法主要用到两个函数,mt_rand(int$min,int$max)函数用来生成随机整数,其中$min-$max是ASCII码的范围,这里是33-126,你可以根据需要调整范围,比如ASCII码表中的97-122位对应英文字母a-z。详见ASCII码表;chr(int$ascii)函数用于将相应的整数$ascii转换为相应的字符。函数create_password($pw_length=8){$randpwd='';对于($i=0;$i<$pw_length;$i++){$randpwd.=chr(mt_rand(33,126));}return$randpwd;}//调用这个函数并传递长度参数$pw_length=6echocreate_password(6);方法二:1.预设一个字符串$chars,包括a-z,A-Z,0-9,和一些特殊字符2.从$chars字符串中随机选择一个字符3.重复第二步n次得到一个长度为n的密码functiongenerate_password($length=8){//密码字符集,你可以添加任何你需要的字符$chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_[]{}>~`+=,.;:/?|';$密码='';for($i=0;$i<$length;$i++){//这里有两种获取字符的方法//第一种是用substr截取$chars中的任意字符;//第二个是取字符数组$chars元素中的任意字符//$password.=substr($chars,mt_rand(0,strlen($chars)-1),1);$password.=$chars[mt_rand(0,strlen($chars)-1)];}return$password;}方法三:1.预先设置一个字符数组$chars,包括a-z,A-Z,0-9,以及一些特殊字符2.通过array_rand()从数组$chars中随机选择$length元素3.根据得到的键名数组$keys,从数组$chars中取出字符拼接串这种方法的缺点是不会重复取同一个字符。functionmake_password($length=8){//密码字符集,可以添加任何你需要的字符$chars=array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E'、'F'、'G'、'H'、'I'、'J'、'K'、'L'、'M'、'N'、'O'、'P'、'Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9','!','@','#','$','%','^','&','*','(',')','-','_','[',']','{','}','<','>','~','`','+','=',',','.',';',':','/','?','|');//在$chars$length数组元素键名中随机选取$keys=array_rand($chars,$length);$密码='';for($i=0;$i<$length;$i++){//将$length数组元素拼接成字符串$password.=$chars[$keys[$i]];}return$password;}方法四:该方法是BlueIdeal转载本文后由网友提供的新方法,算法简单,代码短,只是md5()的返回值函数,生成的密码只有字母和数字,不过也是个好方法。算法思路:1.time()获取当前Unix时间戳2.将第一步获取的时间戳用md5()加密3.从第二步的加密结果中截取n位得到想要的密码函数get_password($长度=8){$str=substr(md5(time()),0,6);return$str;}时间效率比较我们使用下面的PHP代码来计算以上4个随机密码生成函数生成6位密码的运行时间,然后对它们的时间效率做一个简单的比较。最终结果为:方法一:9.8943710327148E-5秒方法二:9.6797943115234E-5秒方法三:0.00017499923706055秒方法四:3.4093856811523E-5秒OK可以看出方法一和方法的执行时间2类似,方法4运行时间最短,方法3运行时间稍长。