在PHP中生成密码功能

我之前曾经讨论过生成随机密码。尽管该函数生成了一些不错的密码,但它们可能不如应有的独特。

该功能取自Webtoolkit,可创建具有不同复杂程度的不同长度的密码。

function generatePassword($length=9, $strength=0) {
  $vowels = 'aeiu';
  $consonants = 'bdghjmnpqrstvxyz';
  if ( $strength & 1 ) {
    $consonants .= 'BDGHJLMNPQRSTVWXYZ';
  }
  if ( $strength & 2 ) {
    $vowels .= 'AEU';
  }
  if ( $strength & 4 ) {
    $consonants .= '23456789';
  }
  if ( $strength & 8 ) {
    $consonants .= '@#$%';
  }
 
  $password = '';
  $alt = time() % 2;
  for ($i = 0; $i < $length; $i++) {
    if ($alt == 1) {
      $password .= $consonants[(rand() % strlen($consonants))];
      $alt = 0;
    } else {
      $password .= $vowels[(rand() % strlen($vowels))];
      $alt = 1;
    }
  }
  return $password;
}

第一个参数是函数应返回的字符数。第二个参数是一个最大为8的数字,它转换为复杂度。最少复杂的密码仅包含小写辅音。最复杂的密码由大写和小写字母以及数字和符号组成。

您可能会注意到某些字母和数字丢失了,这是有意的。生成密码时,许多字符可能非常相似。零看起来像是大写的O,而我看起来像是数字的小写L。删除这些字母会阻止人们输入错误的密码,以后不得不重新申请密码。而且,即使您不应该写下许多密码,即使这样做,许多人看起来也一样。例如,在混合使用大写和小写字母时,很难看到大写和小写字母W之间的差异。

您可以像这样运行该函数。

echo generatePassword(8,1); // 放任自流
echo generatePassword(8,2); // 使用者
echo generatePassword(8,3); // 迷宫
echo generatePassword(8,4); // tanapa3a
echo generatePassword(8,5); // ary2ugeR
echo generatePassword(8,6); // utebyq
echo generatePassword(8,7); // yRysuNEV
echo generatePassword(8,8); // ygyqyha%

这只是我从这些参数中获得的输出,每次都运行一个不同的密码。您应该将8级用于任何系统管理员密码。