Position actuelle: Accueil> Derniers articles> Quelles sont les méthodes pour générer des mots de passe aléatoires à l'aide de la fonction Rand ()? Comment améliorer la sécurité du mot de passe?

Quelles sont les méthodes pour générer des mots de passe aléatoires à l'aide de la fonction Rand ()? Comment améliorer la sécurité du mot de passe?

gitbox 2025-07-27

1. La fonction rand () génère un mot de passe aléatoire

Rand () est une fonction intégrée en PHP qui génère un entier aléatoire dans une plage spécifiée. Lors de la génération d'un mot de passe, nous pouvons générer plusieurs caractères aléatoires en appelant constamment la fonction rand () et enfin former un mot de passe complet. Voici un moyen de générer des mots de passe aléatoires simples à l'aide de la fonction Rand () :

 <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">// Générer un index aléatoire</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">// Attacher des caractères aléatoires à la chaîne de mot de passe</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">// Générer un12Mot de passe aléatoire pour les bits</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Le code ci-dessus définit $ caractères avec un jeu de caractères contenant des numéros, des lettres supérieures et inférieures, puis utilise rand () pour sélectionner au hasard les caractères, et finalement génère un mot de passe de la longueur spécifiée. L'avantage de l'utilisation de Rand () est qu'il est simple à implémenter et pour les applications à court terme, il peut répondre aux besoins de génération de mots de passe aléatoires de base.


2. Les lacunes de Rand ()

Bien que la fonction rand () soit très pratique lors de la génération de mots de passe aléatoires, il ne convient pas aux scénarios avec des exigences de haute sécurité. Les lacunes se reflètent principalement dans les aspects suivants:

  • Pas assez aléatoire : le nombre généré par Rand () n'est pas complètement aléatoire, mais pseudo-aléatoire. Il est basé sur une valeur de graines, et si cette valeur de graines n'est pas suffisamment aléatoire, le mot de passe généré est facilement prédit.

  • Prévisibilité élevée : en l'absence d'une valeur de semence appropriée, la séquence de nombres aléatoires générée par Rand () peut être inversée, en particulier après les redémarrages du serveur, la valeur des semences peut être réinitialisée, ce qui rend le mot de passe généré facile à deviner par les attaquants.


3. Comment améliorer la sécurité du mot de passe

Afin d'améliorer la sécurité du mot de passe, nous devons améliorer le hasard lors de l'utilisation de la fonction Rand () . Voici quelques méthodes courantes:

3.1 Utilisez des générateurs de nombres aléatoires plus forts: random_int () et random_bytes ()

PHP fournit des fonctions de génération de nombres aléatoires plus sûres que Rand () , telles que random_int () et random_bytes () .

  • random_int () : Il s'agit d'un générateur de nombres aléatoires crypté et sécurisé adapté à la génération d'entiers. Il est plus sécurisé que Rand () et convient aux scénarios avec des exigences de sécurité élevées telles que les mots de passe.

 <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">// utiliser random_int Générer des index aléatoires plus sûrs</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">// Générer un12Un mot de passe aléatoire plus sûr pour les bits</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>
  • Random_Bytes () : Si vous avez besoin de générer des octets au lieu de caractères pour le mot de passe, vous pouvez utiliser Random_Bytes () , qui renvoie une chaîne binaire sécurisée qui peut être convertie en caractères imprimables pour le mot de passe.

 <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">// Convertir les octets en chaîne hexadécimale</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">// générer8Mot de passe aléatoire d&#39;un octet</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

3.2 en utilisant des jeux de caractères plus complexes

Afin d'augmenter la force du mot de passe, la complexité du jeu de caractères peut être augmentée et plus de symboles, de caractères spéciaux, etc. peuvent être ajoutés. Cela augmentera considérablement le nombre de combinaisons de mots de passe, ce qui rend la fissuration par force brute plus difficile.

 <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">// utiliser更复杂的字符集</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">// générer16Mot de passe complexe de bits</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

3.3 Définissez la longueur de mot de passe appropriée

La durée du mot de passe est un facteur important dans la force du mot de passe. Il est généralement recommandé que la longueur du mot de passe soit d'au moins 12 caractères, et plus le mot de passe est long, plus il est difficile d'être brutal. De plus, plus il y a de caractères dans le mot de passe, plus la force du mot de passe sera élevée.