timbios Опубликовано 21 июля, 2020 Жалоба Поделиться Опубликовано 21 июля, 2020 В этом уроке вы узнаете, как генерировать случайные пароли с помощью удобной функции PHP. Всегда лучше использовать случайно сгенерированный пароль, а не ваше имя, день рождения, город и т. Д. В настоящее время большинство регистрационных форм требуют, чтобы вы вводили безопасный пароль и показывали предупреждающее сообщение, если пароль слишком простой. Если вы создаете систему регистрации для своего PHP-проекта, будет полезно предложить пароль людям, которые регистрируются. Используя PHP, довольно просто сгенерировать случайный пароль. Используя функцию ниже, вы можете указать, какие символы должны содержать ваши пароли, какая длина пароля и сколько паролей вы хотите сгенерировать. Результатом будет массив с сгенерированными паролями. <?php function randomPassword($length,$count, $characters) { // $length - длина сгенерированного пароля // $count - количество генерируемых паролей // $characters - типы символов, которые будут использоваться в пароле // определяем переменные, используемые в функции $symbols = array(); $passwords = array(); $used_symbols = ''; $pass = ''; // массив разных типов символов $symbols["lower_case"] = 'abcdefghijklmnopqrstuvwxyz'; $symbols["upper_case"] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $symbols["numbers"] = '1234567890'; $symbols["special_symbols"] = '!?~@#-_+<>[]{}'; $characters = split(",",$characters); // получитаем типы символов, которые будут использоваться для пароля foreach ($characters as $key=>$value) { $used_symbols .= $symbols[$value]; // строим строку со всеми символами } $symbols_length = strlen($used_symbols) - 1; //strlen начинается с 0, поэтому для получения количества символов вычитываем 1 for ($p = 0; $p < $count; $p++) { $pass = ''; for ($i = 0; $i < $length; $i++) { $n = rand(0, $symbols_length); // получить случайный символ из строки со всеми символами $pass .= $used_symbols[$n]; // добавляем символ в строку пароля } $passwords[] = $pass; } return $passwords; // возвращаем сгенерированный пароль } $my_passwords = randomPassword(10,1,"lower_case,upper_case,numbers,special_symbols"); print_r($my_passwords); ?> Вот несколько примеров, как генерировать разные случайные пароли с помощью PHP // создать один пароль, используя 5 символов верхнего и нижнего регистра randomPassword(5,1,"lower_case,upper_case"); // создать три пароля, используя 10 строчных букв и цифр randomPassword(10,3,"lower_case,numbers"); // создать пять паролей, используя 12 символов нижнего и верхнего регистра, цифры и специальные символы randomPassword(12,5,"lower_case,upper_case,numbers,special_symbols"); Надеюсь, этот урок был полезен для вас! Удачи в ваших проектах! 2 Ссылка на комментарий
Семен Опубликовано 21 июля, 2020 Жалоба Поделиться Опубликовано 21 июля, 2020 (изменено) Вот короче функция: /** * Генератор паролей * * @param int $length - длина сгенерированного пароля * @param string $chars - символы, которые будут использоваться в пароле * @return string */ function generatePassword(int $length = 8, string $chars = '') { if (empty($chars)) $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; $count = mb_strlen($chars); $result = ''; for ($i = 0; $i < $length; $i++) { $index = rand(0, $count - 1); $result .= mb_substr($chars, $index, 1); } return $result; } Захешировать пароль: $hash = password_hash('123456', PASSWORD_DEFAULT); echo $hash; // $2y$10$hqpo2yrbT.82aQkqFiRkie1Y09lhkijK5DtnoBQHDxEBWo/junDR6 Если хотите сгенерировать строку для имени файла или URL-адреса: $permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyz'; echo substr(str_shuffle($permitted_chars), 0, 10);// Output: 54esmdr0qf Изменено 21 июля, 2020 пользователем Семен 2 Ссылка на комментарий
viiprogrammer Опубликовано 5 октября, 2020 Жалоба Поделиться Опубликовано 5 октября, 2020 В принципе можно вообще не парится и использовать связку uniqid(). rand(0, 999) Ссылка на комментарий
6hr3d3r Опубликовано 14 августа, 2023 Жалоба Поделиться Опубликовано 14 августа, 2023 (изменено) А где проверка пароля? Проверка Хеша из БД. Изменено 14 августа, 2023 пользователем 6hr3d3r Ссылка на комментарий
KirKMS Опубликовано 15 августа, 2023 Жалоба Поделиться Опубликовано 15 августа, 2023 В 15.08.2023 в 02:03, 6hr3d3r сказал: А где проверка пароля? Проверка Хеша из БД. Сравни строку со строкой как вариант. А так используй например password_verify ( string $password , string $hash ) : bool Ссылка на комментарий
6hr3d3r Опубликовано 18 августа, 2023 Жалоба Поделиться Опубликовано 18 августа, 2023 (изменено) Я попробовал по своему оптимизировать этот код: В коде сделал хеширование паролей и проверку введенного пароля: <?php function generateRandomPassword($length, $characters) { $symbols = array( "lower_case" => 'abcdefghijklmnopqrstuvwxyz', "upper_case" => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', "numbers" => '1234567890', "special_symbols" => '!?~@#-_+<>[]{}' ); $used_symbols = ''; foreach (explode(",", $characters) as $value) { $used_symbols .= $symbols[$value]; } $symbols_length = strlen($used_symbols) - 1; $password = ''; for ($i = 0; $i < $length; $i++) { $n = rand(0, $symbols_length); $password .= $used_symbols[$n]; } return $password; } function hashPassword($password) { return password_hash($password, PASSWORD_DEFAULT); } function verifyPassword($password, $hashedPassword) { return password_verify($password, $hashedPassword); } Примеры использования: $newPassword = generateRandomPassword(10, "lower_case,upper_case,numbers,special_symbols"); $hashedPassword = hashPassword($newPassword); $userInput = "пароль_пользователя"; $isPasswordValid = verifyPassword($userInput, $hashedPassword); if ($isPasswordValid) { echo "Пароль правильный!"; } else { echo "Пароль неправильный."; } Изменено 18 августа, 2023 пользователем 6hr3d3r Ссылка на комментарий
KirKMS Опубликовано 19 августа, 2023 Жалоба Поделиться Опубликовано 19 августа, 2023 В 18.08.2023 в 17:50, 6hr3d3r сказал: Я попробовал по своему оптимизировать этот код: В коде сделал хеширование паролей и проверку введенного пароля: <?php function generateRandomPassword($length, $characters) { $symbols = array( "lower_case" => 'abcdefghijklmnopqrstuvwxyz', "upper_case" => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', "numbers" => '1234567890', "special_symbols" => '!?~@#-_+<>[]{}' ); $used_symbols = ''; foreach (explode(",", $characters) as $value) { $used_symbols .= $symbols[$value]; } $symbols_length = strlen($used_symbols) - 1; $password = ''; for ($i = 0; $i < $length; $i++) { $n = rand(0, $symbols_length); $password .= $used_symbols[$n]; } return $password; } function hashPassword($password) { return password_hash($password, PASSWORD_DEFAULT); } function verifyPassword($password, $hashedPassword) { return password_verify($password, $hashedPassword); } Примеры использования: $newPassword = generateRandomPassword(10, "lower_case,upper_case,numbers,special_symbols"); $hashedPassword = hashPassword($newPassword); $userInput = "пароль_пользователя"; $isPasswordValid = verifyPassword($userInput, $hashedPassword); if ($isPasswordValid) { echo "Пароль правильный!"; } else { echo "Пароль неправильный."; } Слишком много бесполезного кода. Эту функцию можно сделать 2 строками когда. 1 Это создание Hash пароля. 2 Это валидация. Ссылка на комментарий
6hr3d3r Опубликовано 26 августа, 2023 Жалоба Поделиться Опубликовано 26 августа, 2023 (изменено) В 19.08.2023 в 21:13, KirKMS сказал: Эту функцию можно сделать 2 строками когда. 1 Это создание Hash пароля. 2 Это валидация. Вот так? : function createPasswordHash($password) { return password_hash($password, PASSWORD_DEFAULT); } function validatePassword($password, $hash) { return password_verify($password, $hash); } // Пример использования $plainPassword = "mySecurePassword"; $hashedPassword = createPasswordHash($plainPassword); if (validatePassword($plainPassword, $hashedPassword)) { echo "Пароль верен!"; } else { echo "Неправильный пароль."; } Изменено 26 августа, 2023 пользователем 6hr3d3r Ссылка на комментарий
Семен Опубликовано 26 августа, 2023 Жалоба Поделиться Опубликовано 26 августа, 2023 5 часов назад, 6hr3d3r сказал: Вот так? : function createPasswordHash($password) { return password_hash($password, PASSWORD_DEFAULT); } function validatePassword($password, $hash) { return password_verify($password, $hash); } // Пример использования $plainPassword = "mySecurePassword"; $hashedPassword = createPasswordHash($plainPassword); if (validatePassword($plainPassword, $hashedPassword)) { echo "Пароль верен!"; } else { echo "Неправильный пароль."; } Сложу код в 1 или 2 строки за 100р. Ссылка на комментарий
kphp Опубликовано 27 августа, 2023 Жалоба Поделиться Опубликовано 27 августа, 2023 (изменено) // Функция гениратор пароля function generatePassword($length = 6){ $chars = 'abdefhiknrstyzABDEFGHKNQRSTYZ23456789'; $numChars = strlen($chars); $string = ''; for ($i = 0; $i < $length; $i++) { $string .= substr($chars, rand(1, $numChars) - 1, 1); } return $string; } Изменено 27 августа, 2023 пользователем kphp Ссылка на комментарий
Семен Опубликовано 27 августа, 2023 Жалоба Поделиться Опубликовано 27 августа, 2023 Еще короче: $bytes = openssl_random_pseudo_bytes(4); $pass = bin2hex($bytes); echo $pass; Результат примерно такой: jenZq3lY Ссылка на комментарий
KirKMS Опубликовано 27 августа, 2023 Жалоба Поделиться Опубликовано 27 августа, 2023 В 26.08.2023 в 22:29, 6hr3d3r сказал: Вот так? : function createPasswordHash($password) { return password_hash($password, PASSWORD_DEFAULT); } function validatePassword($password, $hash) { return password_verify($password, $hash); } // Пример использования $plainPassword = "mySecurePassword"; $hashedPassword = createPasswordHash($plainPassword); if (validatePassword($plainPassword, $hashedPassword)) { echo "Пароль верен!"; } else { echo "Неправильный пароль."; } Какой смысл писать отдельную функцию для генерации пароля и его проверки? Ссылка на комментарий
6hr3d3r Опубликовано 28 августа, 2023 Жалоба Поделиться Опубликовано 28 августа, 2023 19 часов назад, Семен сказал: Еще короче: $bytes = openssl_random_pseudo_bytes(4); $pass = bin2hex($bytes); echo $pass; Результат примерно такой: jenZq3lY Сократи в 1 строку: $pass = bin2hex(openssl_random_pseudo_bytes(4)); echo $pass; Формат вывода: 4a8f1e2b Ссылка на комментарий
Рекомендуемые сообщения