Генерация случайного пароля с условиями - PullRequest
5 голосов
/ 19 марта 2011

Я работаю над генератором случайных паролей , чтобы создать пароли, которые удовлетворяют определенным условиям, включая, но не ограничиваясь:

  • минимальная длина: должен содержать не менее 8 символов
  • строчные буквы: должен содержать строчные буквы (выбирается из набора, чтобы избежать проблем с символами, которые могут быть ошибочно приняты за цифры)
  • заглавные буквы: должен содержать заглавные буквы (опять же, выбранные из набора)
  • цифр: должен содержать цифры

Каков наилучший алгоритмический подход для обеспечения того, чтобы сгенерированный пароль соответствовал всем этим?

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

Ответы [ 3 ]

6 голосов
/ 19 марта 2011

1) случайным образом сгенерируйте число L, которое будет точной длиной вашего пароля.А именно, генерировать так, чтобы оно было больше 8
2) случайным образом генерировать число LL, которое будет количеством строчных букв.LC должен находиться в диапазоне [1..L-2]
3) случайным образом генерировать число LU для прописных букв.Должен быть в диапазоне [1..L-LL-1]
4) LD = L-LL-LU количество прописных цифр
5) случайным образом генерировать строчные буквы LL, прописные буквы LU и цифры LD и сохранятьих в списке (массиве)
6) Случайно перемешать массив

hth

4 голосов
/ 19 марта 2011
  • создание массива символов, содержащего - z, A - Z, 0 - 9 (минус любые символы, которые могут вводить в заблуждение по вопросу)
  • объединить 8 случайно выбранных символов из массива
  • проверить результат, чтобы увидеть, удовлетворяет ли он требованиям
  • если требования не выполняются, начните сначала

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

1 голос
/ 19 марта 2011

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

  • получите случайную строку бесконечной длины (поток)
  • ленивый фильтр для допустимых символов (например: верхний регистр || нижний регистр || цифра)
  • шаг окна желаемой длины по потоку, принять, когда свойства окна в порядке.

На ленивом языке это около 6 строкне шаблонный код и не требует перетасовки.

РЕДАКТИРОВАТЬ: Да, шаг окна, как в комментариях, а не скользить окно.Спасибо!

...