>  기사  >  백엔드 개발  >  PHP에서 임의의 비밀번호를 생성하는 5가지 방법

PHP에서 임의의 비밀번호를 생성하는 5가지 방법

墨辰丷
墨辰丷원래의
2018-06-07 14:07:235526검색

이 글은 PHP에서 무작위 비밀번호를 생성하는 5가지 방법을 주로 소개합니다. 관심 있는 친구들은 모두에게 도움이 되길 바랍니다.

PHP를 사용하여 애플리케이션, 특히 웹사이트 프로그램을 개발할 때 임의의 비밀번호를 생성해야 하는 경우가 많습니다. 예를 들어 사용자 등록을 위해 임의의 비밀번호가 생성되고 사용자 비밀번호 재설정에도 임의의 비밀번호가 필요합니다. 임의의 비밀번호는 고정된 길이의 문자열입니다. 여기에서는 참조용으로 임의의 문자열을 생성하는 여러 가지 방법을 수집했습니다.

방법 1:

1. 35,

와 같이 33~126 사이에서 임의의 정수를 생성합니다. 2. 35를 #

에 해당하는 35와 같은 해당 ASCII 코드 문자로 변환합니다. 3. 위 과정을 반복합니다. 1. 2단계 n번, n자리 비밀번호 연결

이 알고리즘은 주로 두 가지 함수를 사용합니다. mt_rand(int $min, int $max) 함수는 임의의 정수를 생성하는 데 사용됩니다. 여기서 $min – $max는 범위입니다. 여기서는 33~126을 사용하며 필요에 따라 범위를 조정할 수 있습니다. 예를 들어 ASCII 코드 표의 97~122비트는 영문자 a~z에 해당합니다. 코드 테이블; chr(int $ascii) 함수는 해당 정수 $ascii를 해당 문자로 변환하는 데 사용됩니다.

function create_password($pw_length = 8)
{
 $randpwd = '';
 for ($i = 0; $i < $pw_length; $i++) 
 {
  $randpwd .= chr(mt_rand(33, 126));
 }
 return $randpwd;
}

// 이 함수를 호출하고 길이 매개변수 전달 $pw_length = 6

echo create_password(6);

방법 2:

1. a – z, A – Z, 0 – 9를 포함하여 문자열 $chars를 사전 설정합니다. 그리고 일부 특수 문자

2. $chars 문자열에서 무작위로 문자 선택

3. 두 번째 단계를 n번 반복하여 길이가 n

function generate_password( $length = 8 ) {
 // 密码字符集,可任意添加你需要的字符
 $chars = &#39;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ []{}<>~`+=,.;:/?|&#39;;

 $password = &#39;&#39;;
 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;
}

인 비밀번호를 얻습니다. 방법 3:

1. 문자 배열 사전 설정 a – z, A – Z, 0 – 9 및 일부 특수 문자를 포함한 $chars

2. array_rand()를 통해 $chars 배열에서 $length 요소를 무작위로 선택합니다. 3. 획득한 키 이름 배열 $keys에 따라, $chars 배열에서 문자를 추출하고 문자열을 연결합니다. 이 방법의 단점은 동일한 문자를 반복해서 검색할 수 없다는 것입니다.

function make_password( $length = 8 )
{
 // 密码字符集,可任意添加你需要的字符
 $chars = array(&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;f&#39;, &#39;g&#39;, &#39;h&#39;, 
 &#39;i&#39;, &#39;j&#39;, &#39;k&#39;, &#39;l&#39;,&#39;m&#39;, &#39;n&#39;, &#39;o&#39;, &#39;p&#39;, &#39;q&#39;, &#39;r&#39;, &#39;s&#39;, 
 &#39;t&#39;, &#39;u&#39;, &#39;v&#39;, &#39;w&#39;, &#39;x&#39;, &#39;y&#39;,&#39;z&#39;, &#39;A&#39;, &#39;B&#39;, &#39;C&#39;, &#39;D&#39;, 
 &#39;E&#39;, &#39;F&#39;, &#39;G&#39;, &#39;H&#39;, &#39;I&#39;, &#39;J&#39;, &#39;K&#39;, &#39;L&#39;,&#39;M&#39;, &#39;N&#39;, &#39;O&#39;, 
 &#39;P&#39;, &#39;Q&#39;, &#39;R&#39;, &#39;S&#39;, &#39;T&#39;, &#39;U&#39;, &#39;V&#39;, &#39;W&#39;, &#39;X&#39;, &#39;Y&#39;,&#39;Z&#39;, 
 &#39;0&#39;, &#39;1&#39;, &#39;2&#39;, &#39;3&#39;, &#39;4&#39;, &#39;5&#39;, &#39;6&#39;, &#39;7&#39;, &#39;8&#39;, &#39;9&#39;, &#39;!&#39;, 
 &#39;@&#39;,&#39;#&#39;, &#39;$&#39;, &#39;%&#39;, &#39;^&#39;, &#39;&&#39;, &#39;*&#39;, &#39;(&#39;, &#39;)&#39;, &#39;-&#39;, &#39;_&#39;, 
 &#39;[&#39;, &#39;]&#39;, &#39;{&#39;, &#39;}&#39;, &#39;<&#39;, &#39;>&#39;, &#39;~&#39;, &#39;`&#39;, &#39;+&#39;, &#39;=&#39;, &#39;,&#39;, 
 &#39;.&#39;, &#39;;&#39;, &#39;:&#39;, &#39;/&#39;, &#39;?&#39;, &#39;|&#39;);
 // 在 $chars 中随机取 $length 个数组元素键名
 $keys = array_rand($chars, $length); 
 $password = &#39;&#39;;
 for($i = 0; $i < $length; $i++)
 {
  // 将 $length 个数组元素连接成字符串
  $password .= $chars[$keys[$i]];
 }
 return $password;
}

방법 4:

이 방법은 이 글을 블루아이디얼에서 재인쇄한 후 한 네티즌이 제공한 새로운 방법입니다. 알고리즘이 간단하고 코드도 짧습니다. md5() 함수. 비밀번호는 문자와 숫자로만 구성되지만 여전히 좋은 방법입니다. 알고리즘 아이디어:

1. time()은 현재 Unix 타임스탬프를 가져옵니다.

2. 첫 번째 단계에서 얻은 타임스탬프를 md5()로 암호화합니다.

3. 두 번째 단계에서 암호화된 결과의 n 비트를 가로챕니다.

function get_password( $length = 8 ) 
{
 $str = substr(md5(time()), 0, 6);
 return $str;
}

시간 효율성 비교

다음 PHP 코드를 사용하여 위 4가지 임의 비밀번호 생성 함수의 실행 시간을 계산하여 6자리 비밀번호를 생성하고, 시간 효율성을 간단하게 비교합니다.

<?php
function getmicrotime()
{
 list($usec, $sec) = explode(" ",microtime());
 return ((float)$usec + (float)$sec);
}
// 记录开始时间
$time_start = getmicrotime();
// 这里放要执行的PHP代码,如:
// echo create_password(6);
// 记录结束时间
$time_end = getmicrotime();
$time = $time_end - $time_start;
 // 输出运行总时间 
echo "执行时间 $time seconds";
?>

방법 5:

function rand_string($len = 16, $keyword = &#39;&#39;) {
 if (strlen($keyword) > $len) {//关键字不能比总长度长
  return false;
 }
 $str = &#39;&#39;;
 $chars = &#39;abcdefghijkmnpqrstuvwxyz23456789ABCDEFGHIJKMNPQRSTUVWXYZ&#39;; //去掉1跟字母l防混淆   
 if ($len > strlen($chars)) {//位数过长重复字符串一定次数
  $chars = str_repeat($chars, ceil($len / strlen($chars)));
 }
 $chars = str_shuffle($chars); //打乱字符串
 $str = substr($chars, 0, $len);
 if (!empty($keyword)) {
  $start = $len - strlen($keyword);
  $str = substr_replace($str, $keyword, mt_rand(0, $start), strlen($keyword)); //从随机位置插入关键字
 }
 return $str;
}

echo rand_string(16,"ab"); //output example:V8bNY6SmkeywordB
?>

최종 결과는 다음과 같습니다.

방법 1: 9.8943710327148E-5초

방법 2: 9.6797943115234E-5초

방법 3: 0.00017499923706055초

방법 4: 3.4093856811523E-5초

방법 1과 방법 2의 실행 시간은 비슷하고, 방법 4의 실행 시간이 가장 짧으며, 방법 3의 실행 시간이 약간 더 길다는 것을 알 수 있습니다.

요약:

위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다.

관련 권장사항:

PHP 콜백 함수 및 익명 함수의 자세한 해석

PHP 데이터베이스에서 memcache 사용

PHP 데이터베이스에서 redis 사용 및 분석

위 내용은 PHP에서 임의의 비밀번호를 생성하는 5가지 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.