Heim > Artikel > Backend-Entwicklung > 4 Möglichkeiten, zufällige Passwörter mit PHP und Leistungsvergleich zu generieren
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. Erzeugen Sie eine zufällige Ganzzahl von 33 – 126, z. B. 35,
2 die entsprechenden ASCII-Codezeichen, z. B. 35 entsprechend #
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 Die Funktion (int $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 Als 97-122 Bits in der ASCII-Codetabelle finden Sie in der ASCII-Codetabelle die Funktion chr (int $ascii).
Quelle drucken?
<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>
Methode 2:
1 Zeichenfolge $chars, einschließlich a – z, A – Z, 0 – 9 und einige Sonderzeichen
2. Wählen Sie zufällig ein Zeichen
in der Zeichenfolge $chars aus. 3. Wiederholen Sie den Vorgang im zweiten Schritt n-mal kann das Passwort mit der Länge n erhalten werden:
1. Legen Sie ein Zeichenarray $chars fest, einschließlich a – z, A – Z, 0 – 9 und einige Sonderzeichen
2. Wählen Sie aus dem Array über array_rand() zufällig $length-Elemente
aus $chars aus. 3. Nehmen Sie entsprechend dem erhaltenen Schlüsselnamen-Array $keys die Zeichen aus dem Array $chars heraus und verketten Sie sie Zeichenfolge. Der Nachteil dieser Methode besteht darin, dass dieselben Zeichen nicht wiederholt abgerufen werden.<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>Quelle drucken?
Methode 4:
Diese Methode ist die Basis Nach dem Nachdruck dieses Artikels durch Blue Ideal stellte ein Internetnutzer eine neue Methode mit einem einfachen Algorithmus und einem Kurzcode bereit. Aufgrund des Rückgabewerts der md5()-Funktion enthält das generierte Passwort nur Buchstaben und Zahlen, ist es aber immer noch eine gute Methode. Algorithmusidee:
1. time() erhält den aktuellen Unix-Zeitstempel
2. Verschlüsseln Sie den im ersten Schritt erhaltenen Zeitstempel mit md5()<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>3 Fangen Sie im zweiten Schritt der Verschlüsselung n Bits ab, um das gewünschte Passwort zu erhalten >Vergleich der ZeiteffizienzWir verwenden den folgenden PHP-Code, um die Laufzeit der oben genannten 4 zufälligen Passwortgenerierungsfunktionen zu berechnen, um ein 6-stelliges Passwort zu generieren, und führen dann einen einfachen Vergleich ihrer Zeiteffizienz durch. Quelle drucken?
Das Endergebnis ist:
Methode Eins: 9,8943710327148E-5 Sekunden
Methode zwei: 9,6797943115234E-5 Sekunden<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>Methode drei: 0,00017499923706055 Sekunden Methode vier: 3,40938568115 23E- 5 Sekunden Es ist ersichtlich, dass die Ausführungszeit von Methode 1 und Methode 2 ähnlich ist. Methode 4 hat die kürzeste Laufzeit, während Methode 3 eine etwas längere Laufzeit hat.
Das Obige stellt die vier Methoden zum Generieren zufälliger Passwörter in PHP und deren Leistungsvergleich vor, einschließlich der relevanten Aspekte. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.