如何用PHP生成随机密码?

如何用PHP生成随机密码?,php,random,passwords,Php,Random,Passwords,或者有自动生成随机密码的软件吗?只需构建一个随机a-z,a-z,0-9(或任何您想要的)字符串,直到所需的长度。以下是PHP中的一个示例: function generatePassword($length = 8) { $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; $count = mb_strlen($chars); for ($i = 0, $result =

或者有自动生成随机密码的软件吗?

只需构建一个随机
a-z
a-z
0-9
(或任何您想要的)字符串,直到所需的长度。以下是PHP中的一个示例:

function generatePassword($length = 8) {
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    $count = mb_strlen($chars);

    for ($i = 0, $result = ''; $i < $length; $i++) {
        $index = rand(0, $count - 1);
        $result .= mb_substr($chars, $index, 1);
    }

    return $result;
}
函数生成密码($length=8){
$chars='ABCDEFGHIjklmnopqrstuvxyzabCDEFGHIjklmnopqrstuvxyzo123456789';
$count=mb_strlen($chars);
对于($i=0,$result='';$i<$length;$i++){
$index=rand(0,$count-1);
$result.=mb_substr($chars,$index,1);
}
返回$result;
}

要进行优化,如果要在一次执行过程中多次调用此函数,可以将
$chars
定义为方法(或父类)中的静态变量或常量。

我想玩这个游戏。最简单的方法是:

function rand_passwd( $length = 8, $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' ) {
    return substr( str_shuffle( $chars ), 0, $length );
}

这几乎只是对第一个答案的修改。在第二个参数中指定所需的字符,在第一个参数中指定密码的长度。

这里有一个简单的解决方案。它将包含小写字母和数字

substr(str_shuffle(strtolower(sha1(rand() . time() . "my salt string"))),0, $PASSWORD_LENGTH);
这里有一个更强大的解决方案,在所需的字符范围内随机生成字符代码,长度在所需的范围内

function generateRandomPassword() {
  //Initialize the random password
  $password = '';

  //Initialize a random desired length
  $desired_length = rand(8, 12);

  for($length = 0; $length < $desired_length; $length++) {
    //Append a random ASCII character (including symbols)
    $password .= chr(rand(32, 126));
  }

  return $password;
}
函数生成器域密码(){
//初始化随机密码
$password='';
//初始化所需的随机长度
$desired_length=兰特(8,12);
对于($length=0;$length<$desired_length;$length++){
//附加随机ASCII字符(包括符号)
$password.=chr(兰特(32226));
}
返回$password;
}

您可以直接使用-它支持许多生成算法;你也可以试试我写的一个功能,可以从我的博客上找到。此函数的优点是它对小写、大写、数字和特殊字符具有同等的重要性。可以在这里找到

Pwgen php生成可存储、可发音(更容易记住)的密码:


这可以接受吗?

我喜欢洗牌随机字符数组

$a = str_split("abcdefghijklmnopqrstuvwxyABCDEFGHIJKLMNOPQRSTUVWXY0123456789");
shuffle($a);
echo implode($a); //maxlength
echo "\n".substr( implode($a), 0, 10 ); //instead of 10 => any length

//As function:
function getMeRandomPwd($length){
    $a = str_split("abcdefghijklmnopqrstuvwxyABCDEFGHIJKLMNOPQRSTUVWXY0123456789"); 
    shuffle($a);
    return substr( implode($a), 0, $length );
}
echo "\n".getMeRandomPwd(8)."\n".getMeRandomPwd(11);
// Outpus something like:
// 3Ai4Xf6R2I8bYGUmKgB9jpqo7ncV5teuQhkOHJCNrTP0sLFd1wxSMlEWvyaD
// 3Ai4Xf6R2I
// JsBKWFDa
// gfxsjr3dX70

如果您需要更长的密码,只需连接几次charlist:)

此函数将生成比大多数woted解决方案更强大的密码:

function generatePassword($size=8){
    $p = openssl_random_pseudo_bytes(ceil($size*0.67), $crypto_strong);
    $p = str_replace('=', '', base64_encode($p));
    $p = strtr($p, '+/', '^*');
    return substr($p, 0, $size);      
}
密码的每个字符将是[A-Z]或[A-Z]或^或*

函数生成密码($length=6){
function generate_password($length = 6) {
    $password = '';
    $chars = array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9));
    for ($i = 0; $i < $length; $i ++) {
        $password .= $chars[array_rand($chars)];
    }
    return $password;
}
$password=''; $chars=array_merge(范围('a','z')、范围('a','z')、范围(0,9)); 对于($i=0;$i<$length;$i++){ $password.=$chars[array_rand($chars)]; } 返回$password; }
我就是这样做的

$pw = ""; 
for ($i = 0; $i < 13; $i++)
{
    $pw .= chr(rand(33, 126));
}
$pw=”“;
对于($i=0;$i<13;$i++)
{
$pw.=chr(33126兰特);
}

一个好的密码应该是大写、小写、数字、字母、特殊字符以及长度超过6个字符的混合体。以下是我在应用程序中使用的功能

function randomPassword( $length = 8 ) 
{ 
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_-=+;:,.?"; 
$length = rand(10, 16); 
$password = substr( str_shuffle(sha1(rand() . time()) . $chars ), 0, $length );
 return $password;
}

这将有助于创建随机密码:

<?php
function generatePassword ($length = 8)
{
  $genpassword = "";
  $possible = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
  $i = 0; 
  while ($i < $length) { 
    $char = substr($possible, mt_rand(0, strlen($possible)-1), 1);
    if (!strstr($genpassword, $char)) { 
      $genpassword .= $char;
      $i++;
    }
  }
  return $genpassword;
} 
?>
<input type="text" value="<?php echo generatePassword(); ?>">

使用

它有许多选项可用于创建不同类型的密码:

  • ComputerPasswordGenerator()
  • HybridPasswordGenerator()
    ->
    sjgX-PFjH-zxMz-PRDz-G6mx-wMJ4-ST24
  • HumanPasswordGenerator()
    ->
    Verkuemmerungen Verlotteret dreinzuschauen
    (基于单词列表。在本例中为德语单词列表)
  • RequirementPasswordGenerator()
计算机密码发生器

$generator
  ->setOptionValue(ComputerPasswordGenerator::OPTION_UPPER_CASE, true)
  ->setOptionValue(ComputerPasswordGenerator::OPTION_LOWER_CASE, true)
  ->setOptionValue(ComputerPasswordGenerator::OPTION_NUMBERS, true)
  ->setOptionValue(ComputerPasswordGenerator::OPTION_SYMBOLS, false)
;

$password = $generator->generatePassword();
$generator
  ->setLength(16)
  ->setOptionValue(RequirementPasswordGenerator::OPTION_UPPER_CASE, true)
  ->setOptionValue(RequirementPasswordGenerator::OPTION_LOWER_CASE, true)
  ->setOptionValue(RequirementPasswordGenerator::OPTION_NUMBERS, true)
  ->setOptionValue(RequirementPasswordGenerator::OPTION_SYMBOLS, true)
  ->setMinimumCount(RequirementPasswordGenerator::OPTION_UPPER_CASE, 2)
  ->setMinimumCount(RequirementPasswordGenerator::OPTION_LOWER_CASE, 2)
  ->setMinimumCount(RequirementPasswordGenerator::OPTION_NUMBERS, 2)
  ->setMinimumCount(RequirementPasswordGenerator::OPTION_SYMBOLS, 2)
  ->setMaximumCount(RequirementPasswordGenerator::OPTION_UPPER_CASE, 8)
  ->setMaximumCount(RequirementPasswordGenerator::OPTION_LOWER_CASE, 8)
  ->setMaximumCount(RequirementPasswordGenerator::OPTION_NUMBERS, 8)
  ->setMaximumCount(RequirementPasswordGenerator::OPTION_SYMBOLS, 8)
;

$password = $generator->generatePassword();
RequirementPasswordGenerator

$generator
  ->setOptionValue(ComputerPasswordGenerator::OPTION_UPPER_CASE, true)
  ->setOptionValue(ComputerPasswordGenerator::OPTION_LOWER_CASE, true)
  ->setOptionValue(ComputerPasswordGenerator::OPTION_NUMBERS, true)
  ->setOptionValue(ComputerPasswordGenerator::OPTION_SYMBOLS, false)
;

$password = $generator->generatePassword();
$generator
  ->setLength(16)
  ->setOptionValue(RequirementPasswordGenerator::OPTION_UPPER_CASE, true)
  ->setOptionValue(RequirementPasswordGenerator::OPTION_LOWER_CASE, true)
  ->setOptionValue(RequirementPasswordGenerator::OPTION_NUMBERS, true)
  ->setOptionValue(RequirementPasswordGenerator::OPTION_SYMBOLS, true)
  ->setMinimumCount(RequirementPasswordGenerator::OPTION_UPPER_CASE, 2)
  ->setMinimumCount(RequirementPasswordGenerator::OPTION_LOWER_CASE, 2)
  ->setMinimumCount(RequirementPasswordGenerator::OPTION_NUMBERS, 2)
  ->setMinimumCount(RequirementPasswordGenerator::OPTION_SYMBOLS, 2)
  ->setMaximumCount(RequirementPasswordGenerator::OPTION_UPPER_CASE, 8)
  ->setMaximumCount(RequirementPasswordGenerator::OPTION_LOWER_CASE, 8)
  ->setMaximumCount(RequirementPasswordGenerator::OPTION_NUMBERS, 8)
  ->setMaximumCount(RequirementPasswordGenerator::OPTION_SYMBOLS, 8)
;

$password = $generator->generatePassword();

这是一个函数,它生成一个最小长度、最小位数和最小字母数的密码

function generatePassword() {
$min_length=8;  //Minimum length of the password
$min_numbers=2; //Minimum of numbers AND special characters
$min_letters=2; //Minimum of letters

$password = '';
$numbers=0;
$letters=0;
$length=0;

while ( $length <= $min_length OR $numbers <= $min_numbers OR $letters <= $min_letters) {
    $length+=1;
    $type=rand(1, 3);
    if ($type==1) {
        $password .= chr(rand(33, 64)); //Numbers and special characters
        $numbers+=1;
    }elseif ($type==2) {
        $password .= chr(rand(65, 90)); //A->Z
        $letters+=1;
    }else {
        $password .= chr(rand(97, 122)); //a->z
        $letters+=1;
    }

}
return $password;   
}
函数generatePassword(){
$min_length=8;//密码的最小长度
$min_numbers=2;//数字和特殊字符的最小值
$min_letters=2;//最小字母数
$password='';
$numbers=0;
$letters=0;
$length=0;
而($length另一种非常简单(而且安全!)的方法是以下方法(我用这种方法生成我自己的所有密码):

这将生成一个16个字符的密码,该密码使用的字符范围相当合理


但是,根据您的要求(例如,如果用户需要键入密码),可能需要删除可能会混淆的字符(如l、I、1、0、O、5、S等)。在这种情况下,上述解决方案可能有点过于简单。

我使用st_split and Inflode函数:

function genarateKey(){
    $limit= 8;
    $chars= 'abcdefghijklmnopqrstuvxwyz1234567890!@#$%^&*()_+=-[]{}\|ABCDEFGHIJKLMNOPQRSTUVXWYZ';
    $chararray= str_split($chars);
    $gen=array();
    for($i=0;$i<$limit;$i++){
        $index=rand(0,strlen($chars)-1);
        $gen[$i]= $chararray[$index];
    }
    return implode($gen); //converts array to string
}
函数genarateKey(){
$limit=8;
$chars='abcdefghijjklmnopqrstuvxwyz1234567890!@$%^&*()(+=-[]{}\\'ABCDEFGHIJKLMNOPQRSTUVXWYZ';
$chararray=str_split($chars);
$gen=array();

对于($i=0;$i可记忆密码生成器

function password($length)
  {
    $vowel = array(
        'a',
        'e',
        'i',
        'o',
        'u',
    );

    $consonant = array(
        'b',
        'c',
        'd',
        'f',
        'g',
        'h',
        'j',
        'k',
        'l',
        'm',
        'n',
        'p',
        'q',
        'r',
        's',
        't',
        'v',
        'w',
        'x',
        'y',
        'z',
    );

    $result = '';
    for ($i = 0; $i < $length; $i++) {
        if ($i % 2 == 0) {
            $result .= $consonant[rand(0, 15)];
        } else {
            $result .= $vowel[rand(0, 4)];
        }
    }

    return $result;
}

此功能将包括半位数字和半个数字:

     function generateMixedPassword($length = 8) {
        $base = 'abcdefghijklmnopqrstuvwxyz';
        $baseD = '0123456789';

        $r = array();

        for ($i = 0; $i < $length; $i += 2) {
            $r[] = substr($base, rand(0, strlen($base) - 1), 1);
        }
        for ($i = 0; $i < $length; $i += 2) {
            $r[] = substr($baseD, rand(0, strlen($baseD) - 1), 1);
        }
        shuffle($r);

        return implode('', $r);
    }
function generateMexedPassword($length=8){
$base='abcdefghijklmnopqrstuvxyz';
$baseD='0123456789';
$r=数组();
对于($i=0;$i<$length;$i+=2){
$r[]=substr($base,rand(0,strlen($base)-1),1);
}
对于($i=0;$i<$length;$i+=2){
$r[]=substr($baseD,rand(0,strlen($baseD)-1),1);
}
洗牌($r);
返回内爆(“”,$r);
}

使用相同的登录名,它还可以扩展为包含特殊字符

我认为生成随机密码的更好方法是使用下面的函数,如果有人需要,那么您可以使用这些函数作为强密码

public function randPassword($upper = 2, $lower = 3, $numeric = 2, $other = 1) { 

        $pass_order = Array(); 
        $passWord = ''; 

        //Create contents of the password 
        for ($i = 0; $i < $upper; $i++) { 
            $pass_order[] = chr(rand(65, 90)); 
        } 
        for ($i = 0; $i < $lower; $i++) { 
            $pass_order[] = chr(rand(97, 122)); 
        } 
        for ($i = 0; $i < $numeric; $i++) { 
            $pass_order[] = chr(rand(48, 57)); 
        } 
        for ($i = 0; $i < $other; $i++) { 
            $pass_order[] = chr(rand(33, 47)); 
        } 

        //using shuffle() to shuffle the order
        shuffle($pass_order); 

        //Final password string 
        foreach ($pass_order as $char) { 
            $passWord .= $char; 
        } 
        return $passWord; 
    } 
public函数和密码($upper=2,$lower=3,$numeric=2,$other=1){
$pass_order=Array();
$passWord='';
//创建密码的内容
对于($i=0;$i<$upper;$i++){
$pass_order[]=chr(兰特(65,90));
} 
对于($i=0;$i<$lower;$i++){
$pass_order[]=chr(兰特(97122));
} 
对于($i=0;$i<$numeric;$i++){
$pass_order[]=chr(兰特(48,57));
} 
对于($i=0;$i<$other;$i++){
$pass_order[]=chr(兰特(33,47));