Как сгенерировать случайный пароль с PHP? - PullRequest
36 голосов
/ 03 декабря 2009

Или есть программное обеспечение для автоматической генерации случайных паролей?

Ответы [ 17 ]

96 голосов
/ 03 декабря 2009

Просто создайте произвольную строку 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;
}

Для оптимизации вы можете определить $chars как статическую переменную или константу в методе ( или родительский класс ), если вы будете вызывать эту функцию много раз за одно выполнение.

12 голосов
/ 03 декабря 2009

Вот простое решение. Он будет содержать строчные буквы и цифры.

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;
}
6 голосов
/ 03 декабря 2009

Я хочу играть в игру. Самый простой способ сделать это:

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

Это в значительной степени всего лишь модификация первого ответа. Укажите нужные символы во втором параметре и длину пароля в первом.

4 голосов
/ 10 декабря 2016

Вот как я это делаю.

$pw = ""; 
for ($i = 0; $i < 13; $i++)
{
    $pw .= chr(rand(33, 126));
}
2 голосов
/ 17 июля 2018

здесь - функция, которая генерирует пароль с минимальной длиной, минимальным количеством цифр и минимальным количеством букв.

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 голосов
/ 28 декабря 2016

Хороший пароль должен состоять из прописных, строчных букв, цифр, букв, специальных символов и длиной более 6 символов. Вот функция, которую я использую в своих приложениях.

function randomPassword( $length = 8 ) 
{ 
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_-=+;:,.?"; 
$length = rand(10, 16); 
$password = substr( str_shuffle(sha1(rand() . time()) . $chars ), 0, $length );
 return $password;
}
1 голос
/ 14 апреля 2015

Мне нравится перетасовывать массив случайных символов

$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 голос
/ 16 июня 2012

Также вы можете попробовать функцию, которую я написал и которая доступна в моем блоге. Преимущество этой функции в том, что она одинаково важна для строчных, прописных, чисел и специальных символов. Это можно найти здесь Функция генератора случайных паролей PHP

0 голосов
/ 21 августа 2018

Другой, очень простой (и безопасный!) Способ сделать это заключается в следующем (таким образом я генерирую все свои пароли):

base64_encode(random_bytes(12));

Это генерирует 16-символьный пароль, который использует вполне разумный диапазон символов.

Однако, в зависимости от ваших требований (например, если пользователю необходимо ввести свой пароль), может быть желательно удалить символы, которые могут быть перепутаны (например, l, I, 1, 0, O, 5, S , и так далее). В этом случае приведенное выше решение, вероятно, будет слишком простым.

0 голосов
/ 09 июня 2018

использование 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();

RequirementPasswordGenerator

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