Подтвердить что ты не робот

Как создать случайный пароль с помощью PHP?

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

4b9b3361

Ответ 1

Просто создайте строку случайных az, AZ, 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 как статическую переменную или константу в методе (или родительском классе), если вы будете вызывать эту функцию много раз в течение одного выполнения.

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

$password = hash('sha512', rand());

Не следует помнить слишком сложно. Это может быть легче запомнить:

$password = substr(hash('sha512',rand()),0,12); // Reduces the size to 12 chars

Используется только 16 возможных символов, но это еще 16 ^ 12 возможных паролей (при 300 000 паролей в секунду требуется 29 лет взломать).

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

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

Ответ 9

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

$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:)

Ответ 10

Вы можете просто использовать пакет PEAR Text_Password - он поддерживает довольно много алгоритмов для их создания; и освобождает ваше время, чтобы перейти на что-то еще.

Ответ 11

Pwgen-php производит сберегательные, произносимые (проще запоминающиеся) пароли: http://code.google.com/p/pwgen-php/

Может ли быть приемлемым?

Ответ 12

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

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] или ^ или *

Ответ 13

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

Ответ 14

Это поможет создать случайный пароль:

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

Вот рабочий рабочий пример (демонстрация)

Ответ 15

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

Ответ 16

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

base64_encode(random_bytes(12));

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

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

Ответ 17

Я использую функцию st_split и implode:

function genarateKey(){
    $limit= 8;
    $chars= '[email protected]#$%^&*()_+=-[]{}\|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
}

Ответ 18

Памятный генератор паролей

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

Ответ 19

Эта функция будет включать половину цифр и половину чисел:

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

Используя тот же логин, он может быть расширен и включать специальные символы