Heim >Backend-Entwicklung >PHP-Tutorial >Fünf Möglichkeiten, zufällige Passwörter in PHP zu generieren

Fünf Möglichkeiten, zufällige Passwörter in PHP zu generieren

墨辰丷
墨辰丷Original
2018-06-07 14:07:235553Durchsuche

In diesem Artikel werden hauptsächlich fünf Methoden zum Generieren zufälliger Passwörter in PHP vorgestellt. Interessierte Freunde können sich darauf beziehen. Ich hoffe, dass er für alle hilfreich ist.

Die Verwendung von PHP zum Entwickeln von Anwendungen, insbesondere Website-Programmen, erfordert häufig die Generierung zufälliger Passwörter. Beispielsweise wird ein zufälliges Passwort für die Benutzerregistrierung generiert, und ein zufälliges Passwort ist auch für das Zurücksetzen des Passworts des Benutzers erforderlich. Ein Zufallskennwort ist eine Zeichenfolge fester Länge. Hier habe ich als Referenz mehrere Methoden zum Generieren zufälliger Zeichenfolgen zusammengestellt.

Methode 1:

1. Generieren Sie eine zufällige Ganzzahl von 33 – 126, z. B. 35,

2. Konvertieren Sie 35 in das entsprechende ASCII Codezeichen wie 35 entsprechen #

3. Wiederholen Sie die obigen Schritte 1 und 2 n-mal, um eine Verbindung zu einem n-stelligen Passwort herzustellen

Dieser Algorithmus verwendet hauptsächlich zwei Funktionen, mt_rand ( int Die Funktion „$ min, int $max“ wird zum Generieren zufälliger Ganzzahlen verwendet, wobei $min – $max der Bereich des ASCII-Codes ist, hier ist er 33-126, der Bereich kann nach Bedarf angepasst werden, zum Beispiel 97 – 122 Bit In der ASCII-Codetabelle entsprechen die englischen Buchstaben a – z. Weitere Informationen finden Sie in der ASCII-Codetabelle. Die Funktion chr (int $ascii) wird verwendet, um die entsprechende Ganzzahl $ascii in die entsprechenden Zeichen umzuwandeln.

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

// Rufen Sie diese Funktion auf und übergeben Sie den Längenparameter $pw_length = 6

echo create_password(6);

Methode 2:

1 . Legen Sie eine Zeichenfolge $chars fest, einschließlich a – z, A – Z, 0 – 9 und einiger Sonderzeichen

2. Wählen Sie zufällig ein Zeichen

in der Zeichenfolge $chars aus 3. Wiederholen Sie den Vorgang Der zweite Schritt n-mal, um ein Passwort der Länge n zu erhalten

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;
}

Methode 3:

1. Stellen Sie ein Zeichenarray $chars ein, einschließlich a – z, A – Z, 0 – 9 und einige Sonderzeichen

2. Wählen Sie zufällig $length-Elemente

aus dem Array $chars bis array_rand() aus 3. Gemäß dem Array „Schlüsselnamen abrufen“ $keys , nehmen Sie die Zeichen aus dem Array $chars und verketten Sie die Zeichenfolge. Der Nachteil dieser Methode besteht darin, dass dieselben Zeichen nicht wiederholt abgerufen werden.

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;
}

Methode 4:

Diese Methode wurde von einem Internetnutzer bereitgestellt, nachdem dieser Artikel von Blue Ideal nachgedruckt wurde. Der Algorithmus ist einfach und der Code ist kurz Nur weil das generierte Passwort aufgrund des Rückgabewerts der Funktion md5() nur Buchstaben und Zahlen enthält, ist es dennoch eine gute Methode. Algorithmusidee:

1. time() holt den aktuellen Unix-Zeitstempel

2. Verschlüssele den im ersten Schritt erhaltenen Zeitstempel mit md5()

3. Als Ergebnis Im zweiten Schritt der Verschlüsselung kann das gewünschte Passwort durch Abfangen von n Bits erhalten werden

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

Zeiteffizienzvergleich

Wir verwenden den folgenden PHP-Code, um die 4 Zufallszahlen zu berechnen Zahlen oben Die Laufzeit der Passwortgenerierungsfunktion zum Generieren eines 6-stelligen Passworts, und dann wurde ein einfacher Vergleich ihrer Zeiteffizienz durchgeführt.

<?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";
?>

Methode 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
?>

Das Endergebnis ist:

Methode 1: 9,8943710327148E-5 Sekunden

Methode zwei: 9,6797943115234E-5 Sekunden

Methode drei: 0,00017499923706055 Sekunden

Methode vier: 3,4093856811523E-5 Sekunden

Sie können Methode eins sehen. Die Ausführung Die Laufzeit von Methode 2 ist ähnlich, Methode 4 hat die kürzeste Laufzeit und Methode 3 hat eine etwas längere Laufzeit.

Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird.

Verwandte Empfehlungen:

Detaillierte Interpretation von PHP-Rückruffunktionen und anonymen Funktionen

Verwendung von Memcache in PHP Datenbank

PHP-Datenbank-Redis-Nutzung und -Analyse

Das obige ist der detaillierte Inhalt vonFünf Möglichkeiten, zufällige Passwörter in PHP zu generieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn