Сложный генератор пароля php

tylerhall / strong-passwords.php

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

// Generates a strong password of N length containing at least one lower case letter,
// one uppercase letter, one digit, and one special character. The remaining characters
// in the password are chosen at random from those four sets.
//
// The available characters in each set are user friendly — there are no ambiguous
// characters such as i, l, 1, o, 0, etc. This, coupled with the $add_dashes option,
// makes it much easier for users to manually type or speak their passwords.
//
// Note: the $add_dashes option will increase the length of the password by
// floor(sqrt(N)) characters.
function generateStrongPassword ( $ length = 9 , $ add_dashes = false , $ available_sets = ‘luds’ )
$ sets = array ();
if (strpos( $ available_sets , ‘l’ ) !== false )
$ sets [] = ‘abcdefghjkmnpqrstuvwxyz’ ;
if (strpos( $ available_sets , ‘u’ ) !== false )
$ sets [] = ‘ABCDEFGHJKMNPQRSTUVWXYZ’ ;
if (strpos( $ available_sets , ‘d’ ) !== false )
$ sets [] = ‘23456789’ ;
if (strpos( $ available_sets , ‘s’ ) !== false )
$ sets [] = ‘!@#$%&*?’ ;
$ all = » ;
$ password = » ;
foreach ( $ sets as $ set )
$ password .= $ set [array_rand(str_split( $ set ))];
$ all .= $ set ;
>
$ all = str_split( $ all );
for( $ i = 0 ; $ i < $ length - count( $ sets ); $ i ++)
$ password .= $ all [array_rand( $ all )];
$ password = str_shuffle( $ password );
if (! $ add_dashes )
return $ password ;
$ dash_len = floor(sqrt( $ length ));
$ dash_str = » ;
while (strlen( $ password ) > $ dash_len )
$ dash_str .= substr( $ password , 0 , $ dash_len ) . ‘-‘ ;
$ password = substr( $ password , $ dash_len );
>
$ dash_str .= $ password ;
return $ dash_str ;
>

Источник

Генератор паролей на 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; > ?>

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

Источник

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

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

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

If you have found a spelling error, please, notify us by selecting that text and tap on selected text.

Источник

Генерация паролей в 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

Источник

Генерация пароля на PHP, три уровня сложности.

Author

Автор: Роман Чернышов Опубликовано: 28 января 2011

Работая над очередным проектом, разрабатываемым с нуля, пришла необходимость автоматически генерировать пароли для пользователей при регистрации. Более того, для данного проекта предусматривался платный доступ к определенным разделам. Для защиты которых был выбран так же банальный способ — все под пароль. Разумеется и для реализации этого, требовалось генерировать пароли, но уже более сложные.

Разумеется далеко для поиска функции генерации паролей ходить ненужно, гугл к счастью работает исправно. Но вот именно такой функции, которая могла бы генерировать пароли разной степени сложности в зависимости от наших пожеланий я не нашел. Поэтому доработал то, что было и этим хочу поделиться с вами. А заодно добавить в свой блог полезную для меня заметку))

Собственно сам код на PHP:

function genpass($number, $param = 1)  $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','.',',', '(',')','[',']','!','?', '&','^','%','@','*',' return $pass; } genpass(10, 1); // генерирует пароль из 10 символов содержащий буквы в верхнем и нижнем регистре genpass(10, 2); // генерирует пароль из 10 символов содержащий буквы в верхнем и нижнем регистре, а также цифры от 0 до 9 genpass(10, 3); // генерирует пароль из 10 символов содержащий буквы в верхнем и нижнем регистре, цифры от 0 до 9 и все спец. символы. Пароль получится реально сложным))

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

CategoryPHP Tagspassword, php, автогенерация, генерировать, пароль

Похожие записи

Источник

, '<','>','/',' return $pass; } genpass(10, 1); // генерирует пароль из 10 символов содержащий буквы в верхнем и нижнем регистре genpass(10, 2); // генерирует пароль из 10 символов содержащий буквы в верхнем и нижнем регистре, а также цифры от 0 до 9 genpass(10, 3); // генерирует пароль из 10 символов содержащий буквы в верхнем и нижнем регистре, цифры от 0 до 9 и все спец. символы. Пароль получится реально сложным))

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

CategoryPHP Tagspassword, php, автогенерация, генерировать, пароль

Похожие записи

Источник

Читайте также:  Скрипт галерея на php
Оцените статью