2009-11-17 3 views
3

Я пытаюсь придумать функцию, которая может генерировать случайные пароли, которые должны отвечать следующим требованиям:Как создать (несколько) безопасные пароли в PHP?

  • Между 8 & 14 символов
  • содержат наименьшее одно из следующих действий: строчной буквы, прописную букву, знаки препинания и номер

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

ответ

6
  1. Создайте строчную букву, прописную букву, знак пунктуации и номер, так что теперь у вас есть 4 символа.
  2. Создайте 4-10 случайных символов из всего набора выше.
  3. Смешать полученную строку. В PHP вы можете использовать str_shuffle.

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

+1

Хорошая точка в «ограничениях выбора пароля», вызывая политику на этом уровне. Политики паролей, как правило, не позволяют людям выбирать очевидные вещи, такие как «пароль», а не то, что действительно сделает генератор случайных паролей. +1 – jheddings

+1

точно. Причиной этого является наличие паролей, которые будут соответствовать другим системным правилам, которые я не контролирую. Как я уже сказал, я не ожидаю, что они будут супер-безопасными, мне просто нужно что-то, что я могу использовать для сброса паролей, когда это необходимо. – GSto

0

несколько ленивый подход:

Генерирует случайное число в диапазоне от 8 до 14 лет
порождают совершенно случайную строку символов, которая является то, что долго
Проверьте это с регулярным выражением, которое определяет нижний регистр/верхний регистр/и т.д. требование Если это не удается, повторите попытку.

0

Должно быть довольно простым с sha1. Нечто подобное и просто нарезать ее исправить длину, выбрать случайным образом для верхнего регистра, вставить случайные знаки препинания:

sha1(microtime() . rand(0,100)) 

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

1

В Google есть много примеров "PHP Password Generator" (включая источник). Некоторые из них имеют возможность указывать минимальные требования из классов символов, которые вы упомянули.

Большинство из них полагаются на функцию rand(). Это имеет некоторые риски для безопасности, но они могут быть приемлемыми для вас. Вы также можете заменить его функцией mt_rand() для лучшей случайности.

Если вам действительно нужно получить хороший случайный источник, вам нужно опираться на ОС (то есть /dev/random в linux или Utilities объект в Windows).

Смежные вопросы