Генератор случайных паролей php

Генератор паролей на PHP

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

При таком варианте использования функции возвращается 128-битный хеш-код

Генерация пароля по аглоритму MD5

 = md5(uniqid(rand(),true)); print $id."
"
; ?>

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

Генерация "равномерного" пароля

   

// Параметр $number - сообщает число // символов в пароле echo generate_password(intval($_POST['number'])); function generate_password($number) $arr = array('a','b','c','d','e','f', 'g','h','i','j','k','l', 'm','n','o','p','r','s', 't','u','v','x','y','z', 'A','B','C','D','E','F', 'G','H','I','J','K','L', 'M','N','O','P','R','S', 'T','U','V','X','Y','Z', '1','2','3','4','5','6', '7','8','9','0','.',',', '(',')','[',']','!','?', '&','^','%','@','*','$', ','>','/','|','+','-', ','>','`','~'); // Генерируем пароль $pass = ""; for($i = 0; $i $number; $i++) // Вычисляем случайный индекс массива $index = rand(0, count($arr) - 1); $pass .= $arr[$index]; > return $pass; > ?>

Вы можете попробовать данный скрипт прямо сейчас

Источник

Генерация паролей в PHP

В PHP есть несколько функций для генерации случайного числа, это:

  • rand($min, $max) – на платформах Windows $max может быть не больше 32767. С версии PHP 7.1 стала синонимом функции mt_rand() .
  • mt_rand($min, $max) – генерирует случайное значение на базе Вихря Мерсенна (не генерирует криптографически безопасные значения).
  • random_int($min, $max) – генерирует случайные целые числа, пригодные для использования в криптографических целях (появилась в PHP 7.0).

На их основе можно сформировать пароли высокой сложности:

Функции генерации паролей

Генерация пароля на основе массива символов:

function gen_password($length = 6) < $password = ''; $arr = array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' ); for ($i = 0; $i < $length; $i++) < $password .= $arr[random_int(0, count($arr) - 1)]; >return $password; > echo gen_password(8);

На основе строки:

function gen_password($length = 6) < $chars = 'qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP'; $size = strlen($chars) - 1; $password = ''; while($length--) < $password .= $chars[random_int(0, $size)]; >return $password; > echo gen_password(8);

Для более старых версий PHP, необходимо прописать функцию random_int() :

if (!function_exists('random_int')) < function random_int($min, $max) < if (!function_exists('mcrypt_create_iv')) < trigger_error('mcrypt must be loaded for random_int to work', E_USER_WARNING); return null; >if (!is_int($min) || !is_int($max)) < trigger_error('$min and $max must be integer values', E_USER_NOTICE); $min = (int)$min; $max = (int)$max; >if ($min > $max) < trigger_error('$max can\'t be lesser than $min', E_USER_WARNING); return null; >$range = $counter = $max - $min; $bits = 1; while ($counter >>= 1) < ++$bits; >$bytes = (int)max(ceil($bits/8), 1); $bitmask = pow(2, $bits) - 1; if ($bitmask >= PHP_INT_MAX) < $bitmask = PHP_INT_MAX; >do < $result = hexdec(bin2hex(mcrypt_create_iv($bytes, MCRYPT_DEV_URANDOM))) & $bitmask; >while ($result > $range); return $result + $min; > >

На основе функции str_shuffle():

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

function gen_password($length = 6) < $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; return substr(str_shuffle($chars), 0, $length); >echo gen_password(8);

Хранение в базе данных

Пароли в БД не должны хранится в открытом виде, для создания хешей и их проверки есть функции на основе автоматической соли.

Хеширование пароля:

$hash = password_hash('123456', PASSWORD_DEFAULT); echo $hash; // $2y$10$hqpo2yrbT.82aQkqFiRkie1Y09lhkijK5DtnoBQHDxEBWo/junDR6

Проверка:

$hash = '$2y$10$hqpo2yrbT.82aQkqFiRkie1Y09lhkijK5DtnoBQHDxEBWo/junDR6'; if (password_verify('123456', $hash)) < echo 'Пароль правильный!'; >else

Источник

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

PHP Library to generate random passwords

License

hackzilla/password-generator

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

This project has always been MIT since 2014

Git stats

Files

Failed to load latest commit information.

README.md

Password Generator Library

Simple library for generating random passwords.

Build Status SensioLabsInsight

curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer 

Now tell composer to download the library by running the command:

$ composer require hackzilla/password-generator

Composer will add the library to your composer.json file and install it into your project's vendor/hackzilla directory.

use Hackzilla\PasswordGenerator\Generator\ComputerPasswordGenerator; $generator = new 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();

If you want to generate 10 passwords that are 12 characters long.

use Hackzilla\PasswordGenerator\Generator\ComputerPasswordGenerator; $generator = new ComputerPasswordGenerator(); $generator ->setUppercase() ->setLowercase() ->setNumbers() ->setSymbols(false) ->setLength(12); $password = $generator->generatePasswords(10);

Hybrid Password Generator Usage

use Hackzilla\PasswordGenerator\Generator\HybridPasswordGenerator; $generator = new HybridPasswordGenerator(); $generator ->setUppercase() ->setLowercase() ->setNumbers() ->setSymbols(false) ->setSegmentLength(3) ->setSegmentCount(4) ->setSegmentSeparator('-'); $password = $generator->generatePasswords(10);

If you can think of a better name for this password generator then let me know.

The segment separator will be remove from the possible characters.

Human Password Generator Usage

use Hackzilla\PasswordGenerator\Generator\HumanPasswordGenerator; $generator = new HumanPasswordGenerator(); $generator ->setWordList('/usr/share/dict/words') ->setWordCount(3) ->setWordSeparator('-'); $password = $generator->generatePasswords(10);

Requirement Password Generator Usage

use Hackzilla\PasswordGenerator\Generator\RequirementPasswordGenerator; $generator = new 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();

A limit can be removed by passing null

$generator ->setMinimumCount(RequirementPasswordGenerator::OPTION_UPPER_CASE, null) ->setMaximumCount(RequirementPasswordGenerator::OPTION_UPPER_CASE, null) ;

When setting the minimum and maximum values, be careful of unachievable settings.

For example the following will end up in an infinite loop.

$generator ->setLength(4) ->setOptionValue(RequirementPasswordGenerator::OPTION_UPPER_CASE, true) ->setOptionValue(RequirementPasswordGenerator::OPTION_LOWER_CASE, false) ->setMinimumCount(RequirementPasswordGenerator::OPTION_UPPER_CASE, 5) ->setMaximumCount(RequirementPasswordGenerator::OPTION_LOWER_CASE, 1) ;

For the moment you can call $generator->validLimits() to test whether the counts will cause problems. If the method returns true, then you can proceed. If false, then generatePassword() will likely cause an infinite loop.

Since version 1.5.0, the library depends on the presence of random_int which is found in PHP 7.0+

About

PHP Library to generate random passwords

Источник

12 способов для генерации пароля на PHP

PHP

Рано или поздно при создании паролей нам приходится пользоваться функциями для случайного создания паролей. На этот раз хотелось бы поделиться различными способами генерации паролей на языке PHP.

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

Вариант 1.

/** * Generate password * * @param int $length * @return string */ function generatePassword001(int $length = 8): string < $password = ''; for ($i = 0; $i < $length; $i++) < $password .= chr(rand(32, 126)); >return $password; >

Вариант 2.

/** * Generate password * * @param int $length * @return string */ function generatePassword002(int $length = 8): string < $password = ''; $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $limit = strlen($characters) - 1; for ($i = 0; $i < $length; $i++) < $password .= $characters[rand(0, $limit)]; >return $password; >

Вариант 3.

/** * Generate password * * @param int $length * @return string */ function generatePassword003(int $length = 8): string

Вариант 4.

/** * Generate password * * @param int $length * @return string */ function generatePassword004(int $length = 8): string < $password = openssl_random_pseudo_bytes(ceil($length * 0.67), $crypto_strong); $password = str_replace(['=', '/', '+'], '', base64_encode($password)); $password = substr($password, 0, $length); return $password; >

Вариант 5.

/** * Generate password * * @param int $length * @return string */ function generatePassword005(int $length = 8): string < try < $password = str_replace(['=', '/', '+'], '', base64_encode(random_bytes($length))); $password = substr($password, 0, $length); return $password; >catch (Exception $e) < return $e->getMessage(); > >

Вариант 6.

/** * Generate password * * @param int $upper * @param int $lower * @param int $numeric * @param int $other * @return string */ function generatePassword006($upper = 2, $lower = 3, $numeric = 2, $other = 1): string < $password = ''; $passwordOrder = []; for ($i = 0; $i < $upper; $i++) < $passwordOrder[] = chr(rand(65, 90)); >for ($i = 0; $i < $lower; $i++) < $passwordOrder[] = chr(rand(97, 122)); >for ($i = 0; $i < $numeric; $i++) < $passwordOrder[] = chr(rand(48, 57)); >for ($i = 0; $i < $other; $i++) < $passwordOrder[] = chr(rand(33, 47)); >shuffle($passwordOrder); foreach ($passwordOrder as $char) < $password .= $char; >return $password; >

Вариант 7.

/** * Generate password * * @param int $length * @param string $availableSets * @return string */ function generatePassword007(int $length = 8, string $availableSets = 'luds'): string < $symbols = []; $password = ''; $str = ''; if (strpos($availableSets, 'l') !== false) < $symbols[] = 'abcdefghjkmnpqrstuvwxyz'; >if (strpos($availableSets, 'u') !== false) < $symbols[] = 'ABCDEFGHJKMNPQRSTUVWXYZ'; >if (strpos($availableSets, 'd') !== false) < $symbols[] = '23456789'; >if (strpos($availableSets, 's') !== false) < $symbols[] = '!@#$%&*?'; >foreach ($symbols as $symbol) < $password .= $symbol[array_rand(str_split($symbol))]; $str .= $symbol; >$str = str_split($str); for ($i = 0; $i < $length - count($symbols); $i++) < $password .= $str[array_rand($str)]; >$password = str_shuffle($password); return $password; >

Вариант 8.

/** * Generate password * * @param int $length * @return string */ function generatePassword008(int $length = 8): string < $password = ''; $possible = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $i = 0; $lenPossible = strlen($possible) - 1; while ($i < $length) < $char = substr($possible, mt_rand(0, $lenPossible), 1); if (!strstr($password, $char)) < $password .= $char; $i++; >> return $password; >

Вариант 9.

/** * Generate password * * @param int $length * @return string */ function generatePassword009(int $length = 8): string < $password = substr(str_shuffle(strtolower(sha1(rand() . time() . 'here our salt'))), 0, $length); for ($i=0, $c = $length; $i < $c; $i++) < $password[$i] = rand(0, 100) >50? strtoupper($password[$i]):$password[$i]; > return $password; >

Вариант 10.

/** * Generate password * * @param int $length * @return false|string * @throws Exception */ function generatePassword010(int $length = 8): string < if (function_exists('random_bytes')) < try < $bytes = random_bytes(ceil($length / 2)); >catch (Exception $e) < return $e->getMessage(); > > elseif (function_exists('openssl_random_pseudo_bytes')) < $bytes = openssl_random_pseudo_bytes(ceil($length / 2)); >else < throw new Exception("no cryptographically secure random function available"); >$password = substr(bin2hex($bytes), 0, $length); for ($i=0, $c = $length; $i < $c; $i++) < $password[$i] = rand(0, 100) >50? strtoupper($password[$i]):$password[$i]; > return $password; >

Вариант 11.

/** * Generate password * * @param int $numAlpha * @param int $numDigit * @param int $numNonAlpha * @return string */ function generatePassword011($numAlpha = 4, $numDigit = 2, $numNonAlpha = 2): string < $listAlpha = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $listDigits = '0123456789'; $listNonAlpha = ',;. $/*-+&@_+;./*&?$-!,'; return str_shuffle( substr(str_shuffle($listAlpha), 0, $numAlpha) . substr(str_shuffle($listDigits), 0, $numDigit) . substr(str_shuffle($listNonAlpha), 0, $numNonAlpha) ); >

И еще один последний вариант генерации пароля от меня. Данный вариант похож на 7й, но с небольшими изменениями и добавлением еще вариантов с кириллицей.

Вариант 12.

/** * Generate password * - * @param int $length * @param string $availableSets * @return string */ function generatePassword012(int $length = 8, string $availableSets = 'luds'): string < $symbols = []; $password = $str = $oldIdx = ''; $availableSets = str_split($availableSets); if (in_array('l', $availableSets)) < // Letters lower $symbols[] = 'abcdefghjkmnpqrstuvwxyz'; >if (in_array('u', $availableSets)) < // Letters upper $symbols[] = 'ABCDEFGHJKMNPQRSTUVWXYZ'; >if (in_array('d', $availableSets)) < // Digits $symbols[] = '23456789'; >if (in_array('s', $availableSets)) < // Special symbols $symbols[] = '!@#$%&*?'; >if (in_array(1, $availableSets)) < // Russian Letters lower $symbols[] = 'абвгдеёжзийклмнпрстуфхцчшщыэюяъь'; >if (in_array(2, $availableSets)) < // Russian Letters lower $symbols[] = 'АБВГДЕЁЖЗИЙКЛМНПРСТУФХЦШЩЫЭЮЯЪЬ'; >$symbols = implode('', $symbols); $symbols = preg_split('//u', $symbols, null, PREG_SPLIT_NO_EMPTY); for ($i=0; $i < $length; $i++) < do < $newIdx = array_rand($symbols); >while($newIdx == $oldIdx); $password .= $symbols[$newIdx]; $oldIdx = $newIdx; > return $password; >

Естественно, здесь перечислены не все возможные способы, а наиболее понравившиеся мне. Возможно, вы используете более интересные решения. Всегда готов выслушать все ваши комментарии. А еще вы можете сгенерировать пароль на данном сайте.

Спасибо и до новых встреч.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Читайте также:  Python как удалить виджет
Оцените статью