web-dev-qa-db-ja.com

PHPでランダムパスワードを生成する方法は?

または、ランダムなパスワードを自動生成するソフトウェアはありますか?

36
user198729

ランダムなa-zA-Z0-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;
}

最適化するには、$chars単一の実行中にこの関数を何度も呼び出す場合は、メソッドの静的変数または定数として(または親クラス)。

96
Matt Huggins

これが簡単な解決策です。小文字と数字が含まれます。

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;
}
12
Dolph

ゲームをプレイしたいです。最も簡単な方法は次のとおりです。

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

これは、最初の回答を修正しただけです。 2番目のパラメーターで必要な文字を指定し、最初のパラメーターでパスワードの長さを指定します。

6
William

これが私のやり方です。

$pw = ""; 
for ($i = 0; $i < 13; $i++)
{
    $pw .= chr(Rand(33, 126));
}
4
fooSolver

これは、最小長、最小桁数、最小文字数のパスワードを生成する関数です。

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;   
}
2
Ronan Corre

適切なパスワードは、大文字、小文字、数字、文字、特殊文字、および6文字以上の両方を組み合わせたものにする必要があります。アプリで使用する機能は次のとおりです。

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

また、私が書いた私のブログから利用できる機能を試すこともできます。この関数の利点は、小文字、大文字、数字、特殊文字を同等に重要にすることです。ここにあります PHPランダムパスワードジェネレーター関数

1
Jaspreet Chahal

ランダムな文字の配列をシャッフルするのが好きです

$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を数回連結するだけです:)

1
jave.web

私はst_splitを使用し、関数を分解します:

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
}
0
princebillyGK

この関数は、ほとんどの修正されたソリューションよりも強力なパスワードを生成します。

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]または^または*になります

0
Eugene Mala

この関数には、半角数字と半角数字が含まれます。

     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);
    }

同じログインを使用して、特殊文字も含めるように拡張できます

0
Aris

_hackzilla/password-generator_ を使用します

さまざまな種類のパスワードを作成するための多くのオプションがあります。

  • ComputerPasswordGenerator()
  • HybridPasswordGenerator()-> _sjgX-PFjH-zxMz-PRDz-G6mx-wMJ4-ST24_
  • HumanPasswordGenerator()-> _Verkuemmerungen-verlottertet-dreinzuschauen_(単語リストベース。この場合はドイツ語の単語リスト)
  • RequirementPasswordGenerator()

ComputerPasswordGenerator

_$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();
_

要件PasswordGenerator

_$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();
_
0
c33s

これを行う別の非常に簡単な(そして安全な!)方法は次のとおりです(私は自分のパスワードをすべてそのように生成します):

base64_encode(random_bytes(12));

これにより、かなりの範囲の文字を使用する16文字のパスワードが生成されます。

ただし、要件に応じて(たとえば、ユーザーがパスワードを入力する必要がある場合)、混同される文字(l、I、1、0、O、5、Sなど)を削除することが望ましい場合があります。に)。その場合、上記のソリューションはおそらく少し単純すぎます。

0
Dave Vogt

PEARのText_Passwordパッケージ を使用するだけで済みます-それらを生成するためのかなりの数のアルゴリズムをサポートします。他のことをする時間を確保できます。

0
kguest

Pwgen-phpは保存可能な発音可能な(覚えやすい)パスワードを生成します。 http://code.google.com/p/pwgen-php/

それは受け入れられるでしょうか?

0
Andresch Serj

ランダムなパスワードを生成するより良い方法は、関数の下にあると思います。誰かが望むなら、これらを強力なパスワードに使用できます

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; 
    } 
0
nageen nayak
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;
}
0
Alex S

これはランダムなパスワードを作成するのに役立ちます:

<?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(); ?>">

作業例(デモ)

0
M. Lak

思い出に残るパスワードジェネレーター

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;
}

結果:

password(8);//kutekaku
password(11);//rahubabatul
0