Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 生成不含这些字符的随机密码";L10O“;_Php_Security_Random_Passwords - Fatal编程技术网

Php 生成不含这些字符的随机密码";L10O“;

Php 生成不含这些字符的随机密码";L10O“;,php,security,random,passwords,Php,Security,Random,Passwords,我需要根据以下条件生成随机密码: 除了“l10o”之外,所有字符都是允许的 长度为8到12个字符 我尝试过的代码: function generateRandomPassword() { //Initialize the random password $password = ''; //Initialize a random desired length $desired_length = rand(8, 12); for($length = 0; $length

我需要根据以下条件生成随机密码:

  • 除了“l10o”之外,所有字符都是允许的
  • 长度为8到12个字符
我尝试过的代码:

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;
}
如何避免这4个字符=>“l10o

原因:

  • 用户有时会混淆这4个字符
谢谢

试试这个:

function generateRandomPassword($length = 8) {
    $characters = '23456789abcdefghjklmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomPassword = '';
    for ($i = 0; $i < $length; $i++) {
        $randomPassword .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomPassword;
}
function generateRandomPassword($length = 8) {

    $randomPassword = '';
    for ($i = 0; $i < $length; $i++) {
      while (true) {
          //remove 0,1,I,O,l,o
          while(in_array(($number = rand(65, 122)), array(48, 49, 73, 79, 108, 111)));         
          if ($number <= 90 or $number >= 97) {
              $randomPassword .= chr($number);                                      
              break ;
           }
     }
  }
    return $randomPassword;
}

echo generateRandomPassword();
函数生成器域密码($length=8){
$characters='23456789abcdefghjklmnpqrstuvxyzabcdefghjklmnpqrstuvxyz';
$charactersLength=strlen($characters);
$randomPassword='';
对于($i=0;$i<$length;$i++){
$randomPassword.=$characters[rand(0,$charactersLength-1)];
}
返回$randomPassword;
}

您不需要更改代码。只需使用str_replace替换这些单词,您可以尝试以下解决方案:)。刚刚编辑了你的代码

function generateRandomPassword($length = 8) {
    $characters = '23456789abcdefghjklmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomPassword = '';
    for ($i = 0; $i < $length; $i++) {
        $randomPassword .= $characters[rand(0, $charactersLength - 1)];
    }
    return str_replace(['l','1','o','0'], ['A','B','C','D'], $randomPassword);
}
函数生成器域密码($length=8){
$characters='23456789abcdefghjklmnpqrstuvxyzabcdefghjklmnpqrstuvxyz';
$charactersLength=strlen($characters);
$randomPassword='';
对于($i=0;$i<$length;$i++){
$randomPassword.=$characters[rand(0,$charactersLength-1)];
}
返回str_replace(['l','1','o','0'],['A','B','C','D'],$randomPassword);
}
$string='abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyzo123456789';
$req\U pword\U len=20;
$char\u count=0;
$password='';
$chars=str_split($string);
而($char\u count<$req\u pword\u len){
$char=百万兰特(0,61);
$password.=(字符串)$chars[$char];
$char_count++;
}
更改的值

  • $string仅为您希望允许的字符
  • $req_pword_len到所需密码长度

请不要使用当前提供的用于生成密码的任何其他答案。无论如何,他们都不安全

  • rand()
    ->否
  • mt_rand()
    ->绝对不是
我将从一篇标题恰当的博客文章中得出这个解决方案

您可能没有,除非您将来在PHP7发布时阅读本文。对于我们这些生活在当下的人,请使用。

试试以下方法:

function generateRandomPassword($length = 8) {
    $characters = '23456789abcdefghjklmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomPassword = '';
    for ($i = 0; $i < $length; $i++) {
        $randomPassword .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomPassword;
}
function generateRandomPassword($length = 8) {

    $randomPassword = '';
    for ($i = 0; $i < $length; $i++) {
      while (true) {
          //remove 0,1,I,O,l,o
          while(in_array(($number = rand(65, 122)), array(48, 49, 73, 79, 108, 111)));         
          if ($number <= 90 or $number >= 97) {
              $randomPassword .= chr($number);                                      
              break ;
           }
     }
  }
    return $randomPassword;
}

echo generateRandomPassword();
函数生成器域密码($length=8){
$randomPassword='';
对于($i=0;$i<$length;$i++){
while(true){
//移除0,1,I,O,l,O
而(在_数组中($number=rand(65122)),数组(48,49,73,79,108,111));
如果($number=97){
$randomPassword.=chr($number);
打破
}
}
}
返回$randomPassword;
}
echo GeneratorDomainPassword();

仍然得到
i
。。。我需要避免这4个字符
l1o0
您可以自己删除它:P无论如何,已更新:)这不够安全,无法用于密码
rand()
特别弱。这不仅不安全(永远不要使用
rand()
生成密码),而且偏向于这4个字符。
function generateRandomPassword($length = 8) {

    $randomPassword = '';
    for ($i = 0; $i < $length; $i++) {
      while (true) {
          //remove 0,1,I,O,l,o
          while(in_array(($number = rand(65, 122)), array(48, 49, 73, 79, 108, 111)));         
          if ($number <= 90 or $number >= 97) {
              $randomPassword .= chr($number);                                      
              break ;
           }
     }
  }
    return $randomPassword;
}

echo generateRandomPassword();