Home  >  Article  >  Backend Development  >  A brief introduction to how php generates random passwords

A brief introduction to how php generates random passwords

黄舟
黄舟Original
2017-08-10 11:43:281164browse


Using PHP to develop applications, especially website programs, often requires generating random passwords. For example, a random password is generated for user registration, and a random password is also required for user reset password. A random password is a string of fixed length. Here I have collected several methods of generating random strings for your reference.

Method 1

  1. Generate a random integer from 33 – 126, such as 35,

  2. Convert 35 to the corresponding ASCII code characters, such as 35 corresponding to

  3. # Repeat the above steps 1 and 2 n times to connect into an n-digit password

Instructions:

This algorithm mainly uses two functions, mt_rand (int $min, int $max)The function is used to generate random integers, among which $min – $max It is the range of ASCII code, here it is 33 -126, the range can be adjusted as needed, for example, the 97 - 122 bits in the ASCII code table correspond to a - z, 65 - — 90 corresponds to the English letters A — Z. For details, please refer to the ASCII code table.

<?phpfunction create_password($pw_length = 8) {
    $randpwd = &#39;&#39;;    for ($i = 0; $i < $pw_length; $i++) 
    {        $randpwd .= chr(mt_rand(33, 126));
    }    return $randpwd;
}// 调用该函数,传递长度参数$pw_length = 6echo create_password(6);

Method 2

  1. Preset a string $chars, including a – z, A – Z, 0 – 9. and some special characters

  2. randomly pick a character

  3. in the
  4. $chars

    string and repeat In the second step n times, a password of length n can be obtained

<?php
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;
}
echo generate_password(6);

Method 3

  1. Preset a character array$ chars, including a – z, A – Z, 0 – 9, and some special characters

  2. through array_rand() Randomly select $length elements from the array $chars

  3. based on the obtained key name array$keys, take out the characters from the array $chars and concatenate the string. The disadvantage of this method is that the same characters will not be retrieved repeatedly.

<?phpfunction 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;
}echo make_password(6);

Method 4

Use md5 to encrypt the current timestamp and intercept some digits. The generated password contains only letters and numbers.

  1. time() Get the current Unix timestamp

  2. Encrypt the timestamp obtained in the first step with md5()

  3. Use the result of the second step of encryption and intercept n digits to get the desired password

<?phpfunction get_password( $length = 8 )  {
    $str = substr(md5(time()), 0, $length);    return $str;
}echo get_password(6);

Method 5

str_shuffle — Randomly type A random string

<?phpfunction random_pass( $length = 8 ){
    $password = &#39;&#39;;    
    $chars = &#39;abcdefghijkmnpqrstuvwxyz23456789ABCDEFGHIJKMNPQRSTUVWXYZ&#39;; //去掉1跟字母l防混淆            
    if ($length > strlen($chars)) {//位数过长重复字符串一定次数
        $chars = str_repeat($chars, ceil($length / strlen($chars)));
    }    $chars = str_shuffle($chars);    
    $password = substr($chars, 0, $length);    
    return $password;
}echo random_pass(6);

The above is the detailed content of A brief introduction to how php generates random passwords. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn