Генератор паролей для сайта
Дата публикации:
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 на примере приема платежей на сайте
Смотреть
—>
Метки:
генератор паролей
Похожие статьи:
Комментарии Вконтакте:
Комментарии Facebook:
https://webformyself.com/generator-parolej-dlya-sajta/
—>
Генерация xkcd паролей на PHP / Хабр
Все текущие реализации этого метода генерации паролей рассчитаны на английские слова, а значит пароли сложнее запомнить русскоязычным. Я вооружился частотным словарем русского языка, и сделал 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 (исходники, автор — ).