Aktueller Standort: Startseite> Neueste Artikel> Was sind die Methoden, um zufällige Kennwörter mit der Funktion Rand () zu generieren? Wie verbessere ich die Sicherheit der Passwort?

Was sind die Methoden, um zufällige Kennwörter mit der Funktion Rand () zu generieren? Wie verbessere ich die Sicherheit der Passwort?

gitbox 2025-07-27

1. Die Funktion rand () generiert ein zufälliges Passwort

Rand () ist eine integrierte Funktion in PHP, die eine zufällige Ganzzahl in einem bestimmten Bereich erzeugt. Beim Generieren eines Kennworts können wir mehrere zufällige Zeichen generieren, indem wir die Funktion rand () ständig aufrufen und schließlich ein vollständiges Kennwort erstellen. Hier finden Sie eine Möglichkeit, einfache zufällige Passwörter mit der Funktion rand () zu generieren:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">generateRandomPassword</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$length</span></span></span><span> = </span><span><span class="hljs-number">8</span></span><span>) {
    </span><span><span class="hljs-variable">$characters</span></span><span> = </span><span><span class="hljs-string">'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'</span></span><span>;
    </span><span><span class="hljs-variable">$password</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
    
    </span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> &lt; </span><span><span class="hljs-variable">$length</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>++) {
        </span><span><span class="hljs-variable">$randomIndex</span></span><span> = </span><span><span class="hljs-title function_ invoke__">rand</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$characters</span></span><span>) - </span><span><span class="hljs-number">1</span></span><span>); </span><span><span class="hljs-comment">// Generieren Sie einen zufälligen Index</span></span><span>
        </span><span><span class="hljs-variable">$password</span></span><span> .= </span><span><span class="hljs-variable">$characters</span></span><span>[</span><span><span class="hljs-variable">$randomIndex</span></span><span>]; </span><span><span class="hljs-comment">// Fügen Sie zufällige Zeichen an die Passwortzeichenfolge bei</span></span><span>
    }

    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$password</span></span><span>;
}

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">generateRandomPassword</span></span><span>(</span><span><span class="hljs-number">12</span></span><span>); </span><span><span class="hljs-comment">// Erzeugen a12Zufälliges Passwort für Bits</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Der obige Code legt $ Zeichen mit einem Zeichensatz fest, das Zahlen, obere und untere Fallbuchstaben enthält, und verwendet dann Rand () , um Zeichen zufällig auszuwählen, und generiert schließlich ein Kennwort der angegebenen Länge. Der Vorteil der Verwendung von Rand () besteht darin, dass es einfach zu implementieren ist, und für kurzfristige Anwendungen kann es die Grundbedürfnisse der zufälligen Kennwortgenerierung erfüllen.


2. Die Mängel von Rand ()

Obwohl die Rand () -Funktion beim Generieren zufälliger Passwörter sehr bequem ist, ist sie nicht für Szenarien mit hohen Sicherheitsanforderungen geeignet. Die Mängel spiegeln sich hauptsächlich in den folgenden Aspekten wider:

  • Nicht zufällig genug : Die von Rand () generierte Zahl ist nicht vollständig zufällig, sondern Pseudo-Random. Es basiert auf einem Saatgutwert, und wenn dieser Saatgutwert nicht zufällig genug ist, kann das generierte Kennwort leicht vorhergesagt werden.

  • Hohe Vorhersagbarkeit : In Abwesenheit eines geeigneten Saatgutwerts kann die durch Rand () generierte Zufallszahl -Sequenz umgekehrt werden, insbesondere nachdem der Server neu gestartet wird, kann der Seed -Wert wieder initialisiert werden, was das generierte Passwort leicht von Angreifern erraten kann.


3.. So verbessern Sie die Passwortsicherheit

Um die Passwortsicherheit zu verbessern, müssen wir die Zufälligkeit verbessern, wenn wir die Funktion rand () verwenden. Hier sind einige häufige Methoden:

3.1 Verwenden Sie stärkere Zufallszahlengeneratoren: random_int () und random_bytes ()

PHP liefert sicherere Funktionen für zufällige Zahlengenerierung als Rand () wie Random_int () und Random_Bytes () .

  • random_int () : Dies ist ein verschlüsselter und sicherer Zufallszahlengenerator, der zum Generieren von Ganzzahlen geeignet ist. Es ist sicherer als Rand () und für Szenarien mit hohen Sicherheitsanforderungen wie Passwörtern geeignet.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">generateSecureRandomPassword</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$length</span></span></span><span> = </span><span><span class="hljs-number">8</span></span><span>) {
    </span><span><span class="hljs-variable">$characters</span></span><span> = </span><span><span class="hljs-string">'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'</span></span><span>;
    </span><span><span class="hljs-variable">$password</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
    
    </span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> &lt; </span><span><span class="hljs-variable">$length</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>++) {
        </span><span><span class="hljs-variable">$randomIndex</span></span><span> = </span><span><span class="hljs-title function_ invoke__">random_int</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$characters</span></span><span>) - </span><span><span class="hljs-number">1</span></span><span>); </span><span><span class="hljs-comment">// verwenden random_int Generieren Sie sicherere zufällige Indizes</span></span><span>
        </span><span><span class="hljs-variable">$password</span></span><span> .= </span><span><span class="hljs-variable">$characters</span></span><span>[</span><span><span class="hljs-variable">$randomIndex</span></span><span>];
    }

    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$password</span></span><span>;
}

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">generateSecureRandomPassword</span></span><span>(</span><span><span class="hljs-number">12</span></span><span>); </span><span><span class="hljs-comment">// Erzeugen a12Ein sichereres zufälliges Passwort für Bits</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>
  • Random_Bytes () : Wenn Sie Bytes anstelle von Zeichen für das Kennwort generieren müssen, können Sie Random_Bytes () verwenden, der eine sichere binäre Zeichenfolge zurückgibt, die für das Kennwort in druckbare Zeichen konvertiert werden kann.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">generateRandomPasswordFromBytes</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$length</span></span></span><span> = </span><span><span class="hljs-number">8</span></span><span>) {
    </span><span><span class="hljs-variable">$bytes</span></span><span> = </span><span><span class="hljs-title function_ invoke__">random_bytes</span></span><span>(</span><span><span class="hljs-variable">$length</span></span><span>);
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">bin2hex</span></span><span>(</span><span><span class="hljs-variable">$bytes</span></span><span>); </span><span><span class="hljs-comment">// Bytes in die hexadezimale Saite konvertieren</span></span><span>
}

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">generateRandomPasswordFromBytes</span></span><span>(</span><span><span class="hljs-number">8</span></span><span>); </span><span><span class="hljs-comment">// erzeugen8Zufälliges Passwort eines Byte</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

3.2 Verwenden komplexerer Zeichensätze

Um die Stärke des Kennworts zu erhöhen, kann die Komplexität des Zeichensatzes erhöht und mehr Symbole, Sonderzeichen usw. hinzugefügt werden. Dies wird die Anzahl der Passwortkombinationen erheblich erhöhen und die Brute-Force-Knackung erschweren.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">generateComplexRandomPassword</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$length</span></span></span><span> = </span><span><span class="hljs-number">12</span></span><span>) {
    </span><span><span class="hljs-variable">$characters</span></span><span> = </span><span><span class="hljs-string">'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&amp;*()_-+=&lt;&gt;?'</span></span><span>;
    </span><span><span class="hljs-variable">$password</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
    
    </span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> &lt; </span><span><span class="hljs-variable">$length</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>++) {
        </span><span><span class="hljs-variable">$randomIndex</span></span><span> = </span><span><span class="hljs-title function_ invoke__">random_int</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$characters</span></span><span>) - </span><span><span class="hljs-number">1</span></span><span>); </span><span><span class="hljs-comment">// verwenden更复杂的字符集</span></span><span>
        </span><span><span class="hljs-variable">$password</span></span><span> .= </span><span><span class="hljs-variable">$characters</span></span><span>[</span><span><span class="hljs-variable">$randomIndex</span></span><span>];
    }

    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$password</span></span><span>;
}

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">generateComplexRandomPassword</span></span><span>(</span><span><span class="hljs-number">16</span></span><span>); </span><span><span class="hljs-comment">// erzeugen16Komplexes Passwort von Bits</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

3.3 Legen Sie die entsprechende Passwortlänge fest

Die Länge des Passworts ist ein wichtiger Faktor für die Stärke des Passworts. Normalerweise wird empfohlen, dass die Länge des Passworts mindestens 12 Zeichen beträgt und je länger das Passwort, desto schwieriger ist es, rohe Erzwungen zu sein. Je mehr Zeichen im Passwort sind, desto höher ist die Stärke des Passworts.