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

Генератор паролей для сайта

Дата публикации:
2013-11-14

От автора:
при создании механизма регистрации пользователей на сайте, иногда возникает необходимость генерации пароля для пользователя. Так как пароли, придуманные пользователями для своих учетных записей, зачастую очень просты, а значит, уязвимы для злоумышленников. Поэтому в данном уроке мы с Вами создадим генератор паролей для сайта, благодаря которому Вы сможете обеспечить высокую безопасность создаваемых учетных записей.

Постановка задачи

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

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Получить курс сейчас!

Вот исходный код, данной страницы:

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

Итак, какой же пароль является безопасным? Это такой пароль, который очень сложно подобрать, так как очень часто процесс взлома учетной записи сводится к простому подбору пароля – то есть перебор символов, пока не найдется подходящая последовательность. Поэтому, согласитесь, если пароль будет состоять из малого количества символов и, к примеру, только из малых английских букв – его будет очень легко подобрать. Но если же мы создадим пароль, состоящий из малых и больших букв, а также включающий в себя цифры – это уже будет довольно сложный и безопасный пароль. Поэтому мы с Вами в данном уроке, реализуем генерацию двух видов паролей. Итак, давайте приступим.

Конфигурационный файл

Для реализации логики скрипта нам необходимо создать файл для хранения некоторых настроек, к тому же если Вы будете применять данный скрипт для своего сайта, то у Вас скорее всего будет свой конфигурационный файл. Поэтому, думаю, будет уместно его создать. Значит, создаем файл config.php и добавляем в него следующий код:

Настройка нам потребуется всего лишь одна – это количество символов пароля. Для хранения настроек будем использовать обычные константы. Сразу же давайте подключим данный файл к нашему тестовому сайту:

Первый вариант генерации пароля

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

Также добавим вызов функции, которая собственно и будет возвращать сгенерированный пароль (опять же в файле index.php):

Теперь переходим в файл functions.php и начнем писать код функции get_pass():

Давайте посмотри в браузере, что получилось:

Как Вы видите, все нормально работает, но при такой генерации может возникнуть ситуация, когда будут повторяться рядом идущие символы. Поэтому давайте добавим небольшой код, который исправит эту проблему:

Смотрите, будем сравнивать символ, сгенерированный на предыдущей итерации цикла (если конечно это не первая итерация), с символом, полученным на текущей итерации. Если они равны, значит, необходимо повторить генерацию символа. Для этого уменьшаем счетчик итераций на единицу $i—, и переходим на следующую итерацию. Давайте еще раз посмотрим в браузере, что получилось:

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

Второй вариант генерации пароля

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

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

Первым делом определяем символы, которые будут использоваться при генерации пароля. В этом примере мы будем использовать массивы для хранения набора символов:

И, к примеру, если получившееся число больше 9, значит, будем использовать чередование гласные — согласные. В другом случае – согласные- гласные.

Теперь для генерации пароля, необходимо создать цикл, в котором мы будем случайным образом, на каждой итерации цикла, получать символы из существующих массивов ($gl, $so) и добавлять их в переменную $result. Итак, цикл для чередования гласные-согласные:

Параметры цикла:

$i – счетчик итераций цикла;

$i < LENGTH – условие выхода из цикла — цикл выполняется пока счетчик итераций меньше значения константы LENGTH;

$i+=2 – действие после каждой итерации цикла. Так как на каждой итерации цикла мы будем получать по два символа пароля, значит, счетчик итераций нужно увеличивать на два.

В коде цикла действуем аналогично первому примеру, то есть случайно определяем индексы ячеек массива. Как обычно диапазон определения случайных чисел, задаем от нуля (индексация массива начинается с нуля) и до индекса последней ячейки массива. Индекс последней ячейки массива определяем, используя функцию count(), которая возвращает количество ячеек массива.

Но вначале, определяем индекс ячейки для массива гласных, а затем индекс – для массива согласных. И по этим индексам заносим символы в переменную $result. Аналогичный цикл для чередования согласные-гласные:

И в конце как обычно возвращаем полученный пароль – то есть переменную $result. Теперь давайте приведу полный код функции генерации пароля:

Давайте посмотрим, какой результат мы получив браузере:

На этом данный урок можно завершать. Всего Вам доброго, удачного кодирования. И увидимся в следующих уроках.

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Получить курс сейчас!

Разработка веб-приложения на PHP

Создайте веб-приложение на PHP на примере приема платежей на сайте

Смотреть

Урок 8. Редактирование ролей, привилегий и категорий
Нанесение водяных знаков на изображение средствами PHP

—>

Метки:
генератор паролей

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

https://webformyself.com/generator-parolej-dlya-sajta/
—>

Генерация xkcd паролей на PHP / Хабр

Известный комикс xkcd подсказывает нам, что пароль, который состоит из 4 часто употребляемых слов — легко запомнить и сложно подобрать.Перевод, оригинал
Все текущие реализации этого метода генерации паролей рассчитаны на английские слова, а значит пароли сложнее запомнить русскоязычным. Я вооружился частотным словарем русского языка, и сделал PHP библиотеку, которая поддерживает генерацию паролей из нескольких наборов слов:

  • английские слова (например, «idea critic happy chinese»);
  • русские слова (например, «порошок земля нуль платье»);
  • транслитерированные русские слова (например, «vysota razum bumazhka razmer»).

Код и списки слов на GitHub.

Установка с помощью composer

{     "require": {         "barzo/password-generator": "dev-master"     } } 

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

Пароли генерирует статическая функция Generator::generate
, которая принимает три параметра: список слов, длину пароля (количество слов) и разделитель слов. Например, генерации пароля из 5 транслитерированных слов разделенных дефисом:

$wordList = new BarzoPasswordWordListRuTranslit();  echo Generator::generate($wordList, 5, '-'); 

Вывод будет содержать строку похожую на:

 dovod-gore-sever-nomer-druzhka 

Для каждого списка слов есть синоним для быстрого вызова:

echo BarzoPasswordGenerator::generateEn(); echo BarzoPasswordGenerator::generateRuTranslit(); echo BarzoPasswordGenerator::generateRu(); 

Списки слов

Английские слова (WordListEn)

Список из 2048 наиболее часто используемых слов английского языка на основании корпуса современного американского английского. Пример вывода — idea critic happy chinese
.

Русские слова (WordListRu)

Список из 2048 наиболее часто используемых русских имен существительных на основании национального корпуса русского языка. Пример вывода — порошок земля нуль платье
.

Русский транслит (WordListRuTranslit)

Список из 2048 слов на основании предыдущего списка, из которого исключены слова, которые содержат неоднозначные для транслитерации буквы (ц, щ, ь, ъ). Пример вывода — vysota razum bumazhka razmer
.

Демо

Попробовать библиотеку можно тут. Реализация с этими списками слов на JS (исходники, автор — ).

Ссылка на основную публикацию