PHP를 사용하여 애플리케이션, 특히 웹사이트 프로그램을 개발하려면 임의의 비밀번호를 생성해야 하는 경우가 많습니다. 예를 들어 사용자 등록을 위해 임의의 비밀번호가 생성되고 사용자 비밀번호 재설정에도 임의의 비밀번호가 필요합니다. 임의의 비밀번호는 고정된 길이의 문자열입니다. 여기에서는 참조용으로 임의의 문자열을 생성하는 여러 가지 방법을 수집했습니다.
방법 1:
1. 35와 같이 33~126의 임의의 정수를 생성하고,
2. #
에 해당하는 35와 같은 해당 ASCII 코드 문자 3. 위의 1단계와 2단계를 n번 반복하여 n자리 비밀번호
에 연결합니다. , mt_rand (int $min, int $max) 함수는 임의의 정수를 생성하는 데 사용됩니다. 여기서 $min – $max는 ASCII 코드의 범위입니다. 여기서 범위는 필요에 따라 조정될 수 있습니다. ASCII 코드 표에서 97-122 비트로, 영문자 a – z에 대해서는 ASCII 코드 표를 참조하십시오. chr (int $ascii) 함수는 해당 정수 $ascii를 해당 문자로 변환하는 데 사용됩니다.
원본 보기
<ol> <li><span><span>function</span><span> create_password(</span><span>$pw_length</span><span> = 8) </span></span></li> <li><span>{ </span></li> <li><span> <span>$randpwd</span><span> = </span><span>''</span><span>; </span></span></li> <li><span> <span>for</span><span> (</span><span>$i</span><span> = 0; </span><span>$i</span><span> < </span><span>$pw_length</span><span>; </span><span>$i</span><span>++) </span></span></li><li><span> { </span></li><li><span> <span>$randpwd</span><span> .= </span><span>chr</span><span>(mt_rand(33, 126)); </span></span></li><li><span> } </span></li><li><span> <span>return</span><span> </span><span>$randpwd</span><span>; </span></span></li><li><span>} </span></li><li><span> </span></li><li><span><span>// 调用该函数,传递长度参数$pw_length = 6</span><span> </span></span></li><li><span><span>echo</span><span> create_password(6); </span></span></li></ol>
방법 2:
1. a – z, A – Z, 0 – 9 및 일부 특수 문자
를 포함한 문자열 $chars 2. $chars 문자열에서 문자
를 무작위로 선택합니다. 3. 두 번째에서 반복합니다. n 단계를 거치면 길이가 n인 비밀번호를 얻을 수 있습니다.
1. a – z, A – Z, 0 – 9 및 일부 특수 문자를 포함하는 문자 배열 $chars를 사전 설정합니다.
2. array_rand()를 통해 배열에서 $chars에서 $length 요소
를 무작위로 선택합니다. 3. 얻은 키 이름 배열 $keys에 따라 $chars 배열에서 문자를 꺼내서 연결합니다. 끈. 이 방법의 단점은 동일한 문자를 반복해서 검색할 수 없다는 것입니다.<ol><li><span><span>function</span><span> generate_password( </span><span>$length</span><span> = 8 ) { </span></span></li><li><span> <span>// 密码字符集,可任意添加你需要的字符</span><span> </span></span></li><li><span> <span>$chars</span><span> = </span><span>'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ []{}<>~`+=,.;:/?|'</span><span>; </span></span></li> <li><span> </span></li> <li><span> <span>$password</span><span> = </span><span>''</span><span>; </span></span></li> <li><span> <span>for</span><span> ( </span><span>$i</span><span> = 0; </span><span>$i</span><span> < </span><span>$length</span><span>; </span><span>$i</span><span>++ ) </span></span></li><li><span> { </span></li><li><span> <span>// 这里提供两种字符获取方式</span><span> </span></span></li><li><span> <span>// 第一种是使用 substr 截取$chars中的任意一位字符;</span><span> </span></span></li><li><span> <span>// 第二种是取字符数组 $chars 的任意元素</span><span> </span></span></li><li><span> <span>// $password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);</span><span> </span></span></li><li><span> <span>$password</span><span> .= </span><span>$chars</span><span>[ mt_rand(0, </span><span>strlen</span><span>(</span><span>$chars</span><span>) - 1) ]; </span></span></li><li><span> } </span></li><li><span> </span></li><li><span> <span>return</span><span> </span><span>$password</span><span>; </span></span></li><li><span>} </span></li></ol>
1. time()은 현재 Unix 타임스탬프를 얻습니다.
2. 첫 번째 단계에서 얻은 타임스탬프를 md5()로 암호화합니다.3. 암호화의 두 번째 단계에서 원하는 비밀번호를 얻기 위해 n 비트를 가로채십시오.
<ol><li><span><span>function</span><span> make_password( </span><span>$length</span><span> = 8 ) </span></span></li><li><span>{ </span></li><li><span> <span>// 密码字符集,可任意添加你需要的字符</span><span> </span></span></li><li><span> <span>$chars</span><span> = </span><span>array</span><span>(</span><span>'a'</span><span>, </span><span>'b'</span><span>, </span><span>'c'</span><span>, </span><span>'d'</span><span>, </span><span>'e'</span><span>, </span><span>'f'</span><span>, </span><span>'g'</span><span>, </span><span>'h'</span><span>, </span></span></li><li><span> <span>'i'</span><span>, </span><span>'j'</span><span>, </span><span>'k'</span><span>, </span><span>'l'</span><span>,</span><span>'m'</span><span>, </span><span>'n'</span><span>, </span><span>'o'</span><span>, </span><span>'p'</span><span>, </span><span>'q'</span><span>, </span><span>'r'</span><span>, </span><span>'s'</span><span>, </span></span></li><li><span> <span>'t'</span><span>, </span><span>'u'</span><span>, </span><span>'v'</span><span>, </span><span>'w'</span><span>, </span><span>'x'</span><span>, </span><span>'y'</span><span>,</span><span>'z'</span><span>, </span><span>'A'</span><span>, </span><span>'B'</span><span>, </span><span>'C'</span><span>, </span><span>'D'</span><span>, </span></span></li><li><span> <span>'E'</span><span>, </span><span>'F'</span><span>, </span><span>'G'</span><span>, </span><span>'H'</span><span>, </span><span>'I'</span><span>, </span><span>'J'</span><span>, </span><span>'K'</span><span>, </span><span>'L'</span><span>,</span><span>'M'</span><span>, </span><span>'N'</span><span>, </span><span>'O'</span><span>, </span></span></li><li><span> <span>'P'</span><span>, </span><span>'Q'</span><span>, </span><span>'R'</span><span>, </span><span>'S'</span><span>, </span><span>'T'</span><span>, </span><span>'U'</span><span>, </span><span>'V'</span><span>, </span><span>'W'</span><span>, </span><span>'X'</span><span>, </span><span>'Y'</span><span>,</span><span>'Z'</span><span>, </span></span></li><li><span> <span>'0'</span><span>, </span><span>'1'</span><span>, </span><span>'2'</span><span>, </span><span>'3'</span><span>, </span><span>'4'</span><span>, </span><span>'5'</span><span>, </span><span>'6'</span><span>, </span><span>'7'</span><span>, </span><span>'8'</span><span>, </span><span>'9'</span><span>, </span><span>'!'</span><span>, </span></span></li><li><span> <span>'@'</span><span>,</span><span>'#'</span><span>, </span><span>'$'</span><span>, </span><span>'%'</span><span>, </span><span>'^'</span><span>, </span><span>'&'</span><span>, </span><span>'*'</span><span>, </span><span>'('</span><span>, </span><span>')'</span><span>, </span><span>'-'</span><span>, </span><span>'_'</span><span>, </span></span></li><li><span> <span>'['</span><span>, </span><span>']'</span><span>, </span><span>'{'</span><span>, </span><span>'}'</span><span>, </span><span>'<'</span><span>, </span><span>'>'</span><span>, </span><span>'~'</span><span>, </span><span>'`'</span><span>, </span><span>'+'</span><span>, </span><span>'='</span><span>, </span><span>','</span><span>, </span></span></li> <li><span> <span>'.'</span><span>, </span><span>';'</span><span>, </span><span>':'</span><span>, </span><span>'/'</span><span>, </span><span>'?'</span><span>, </span><span>'|'</span><span>); </span></span></li> <li><span> </span></li> <li><span> <span>// 在 $chars 中随机取 $length 个数组元素键名</span><span> </span></span></li> <li><span> <span>$keys</span><span> = </span><span>array_rand</span><span>(</span><span>$chars</span><span>, </span><span>$length</span><span>); </span></span></li> <li><span> </span></li> <li><span> <span>$password</span><span> = </span><span>''</span><span>; </span></span></li> <li><span> <span>for</span><span>(</span><span>$i</span><span> = 0; </span><span>$i</span><span> < </span><span>$length</span><span>; </span><span>$i</span><span>++) </span></span></li><li><span> { </span></li><li><span> <span>// 将 $length 个数组元素连接成字符串</span><span> </span></span></li><li><span> <span>$password</span><span> .= </span><span>$chars</span><span>[</span><span>$keys</span><span>[</span><span>$i</span><span>]]; </span></span></li><li><span> } </span></li><li><span> </span></li><li><span> <span>return</span><span> </span><span>$password</span><span>; </span></span></li><li><span>} </span></li></ol>
원본 보기
시간 효율성 비교다음 PHP 코드를 사용하여 위 4가지 임의 비밀번호 생성 함수의 실행 시간을 계산하여 6자리 비밀번호를 생성하고, 시간 효율성에 대한 간단한 비교를 수행합니다. 원본 인쇄를 보시겠습니까?<ol><li><span><span>function</span><span> get_password( </span><span>$length</span><span> = 8 ) </span></span></li><li><span>{ </span></li><li><span> <span>$str</span><span> = </span><span>substr</span><span>(md5(time()), 0, 6); </span></span></li><li><span> <span>return</span><span> </span><span>$str</span><span>; </span></span></li><li><span>} </span></li></ol>
방법 2: 9.6797943115234E-5초
방법 3: 0.00017499923706055초방법 4: 3.40938568 11523E- 5초
<ol><li><span><span><?php </span></span></li><li><span><span>function</span><span> getmicrotime() </span></span></li><li><span>{ </span></li><li><span> list(<span>$usec</span><span>, </span><span>$sec</span><span>) = </span><span>explode</span><span>(</span><span>" "</span><span>,microtime()); </span></span></li><li><span> <span>return</span><span> ((float)</span><span>$usec</span><span> + (float)</span><span>$sec</span><span>); </span></span></li><li><span>} </span></li><li><span> </span></li><li><span><span>// 记录开始时间</span><span> </span></span></li><li><span><span>$time_start</span><span> = getmicrotime(); </span></span></li><li><span> </span></li><li><span><span>// 这里放要执行的PHP代码,如:</span><span> </span></span></li><li><span><span>// echo create_password(6);</span><span> </span></span></li><li><span> </span></li><li><span><span>// 记录结束时间</span><span> </span></span></li><li><span><span>$time_end</span><span> = getmicrotime(); </span></span></li><li><span><span>$time</span><span> = </span><span>$time_end</span><span> - </span><span>$time_start</span><span>; </span></span></li><li><span> </span></li><li><span> <span>// 输出运行总时间 </span><span> </span></span></li><li><span><span>echo</span><span> </span><span>"执行时间 $time seconds"</span><span>; </span></span></li><li><span>?> </span></span></li> </ol>
위 내용은 PHP에서 임의의 비밀번호를 생성하는 네 가지 방법과 관련 측면을 포함하여 성능 비교를 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.