Создание генератора паролей с помощью Python

Привет! В этой статье я хотел сделать краткое руководство о том, как создать генератор паролей с помощью Python. Без дальнейших церемоний, давайте прыгнем в него

Какие основные компоненты и логика нам нужны?

Мыслительный процесс заключается в том, что нам нужно сделать одну важную функцию, которая выполнит всю логику. Тем не менее, мы хотим, чтобы наши пользователи могли динамически выбирать то, что им нужно, например длину пароля, сколько паролей генерировать, какие символы использовать и т. д. Кроме того, если они не хотят выбирать какие-либо конкретные символы, мы нужно дать им все символы автоматически, чтобы пароль был как можно более случайным.
Чтобы не утомлять вас, я буду просто помещать блок кода для каждого раздела вместо того, чтобы разбивать его на мелкие части. По моему опыту, при чтении я обычно прокручиваю до последнего блока кода вместо того, чтобы копировать и вставлять небольшие части или писать их в виде коротких компонентов, потому что, видя полный блок, его легче понять. И да, если вы не хотите читать статью полностью и просто посмотреть исходный код, вот ссылка

Добавьте всех персонажей

Нам понадобится переменная, которая хранит все символы, которые мы будем использовать.

all_chars = “0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\”#$%&’()*+,-./:;<=>?@[\\]^_`{|}~”

Кроме того, импортируйте случайный модуль, потому что он нам скоро понадобится.

import random

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

Функция генератора сборки

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

Я также хочу убедиться, что вы не можете генерировать пароли длиной менее 6 символов и не более 35, достаточно простого оператора if.

Логично предположить, что пользователь может ввести что-то вроде «a» или «b», чтобы попытаться сломать программу, или, может быть, число 77 вместо 35, поэтому для обработки этого я воспользуюсь блоком try exclude. Чуть не забыл сказать, что все это должно быть в цикле while, поэтому, даже если вы введете неправильные параметры, у вас все равно будет возможность повторить попытку.

Теперь, что касается заключительной части, давайте запустим цикл столько раз, сколько наш пользователь указал для количества паролей, и внутри этого цикла для длины пароля, поэтому мы сгенерируем «n» количество паролей с «m» количеством длины. Вот полная функция (не обращайте внимания на заявления типа «Спасибо за использование программы!», это просто сообщения для пользователя)

def generate_password(chars):
  while True:
  try:
   password_length = int(input("How long should the password be?: "))
   password_count = int(input("How many passwords should be generated?: "))
   if password_length < 6 or password_length > 35:
    print("The length should be between 6 and 35")
   elif password_length >= 6 or password_length <= 35:
    break
  except ValueError:
   print("Not a valid number")

 for i in range(password_count):
  password = ""
  for z in range(password_length):
   random_char = random.choice(chars)
   password += random_char
  print(password)
  print("-" * len(password))
 print("Thank you for using the program!")

Построить основную функцию

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

def main():
 while True:
  try:
   mode = int(input("For default character list, please enter 1 \nFor custom character list, please enter 2\nmode: "))
   if mode == 1:
    generate_password(all_chars)
    break
   if mode == 2:
    while True:
     custom_character_list = input("Please enter your custom charcaters: ")
     if " " in custom_character_list:
      print(("Can't use spaces in character list", "red"))
     else:
      break
    generate_password(custom_character_list)
    break
   else:
    print("Not a valid mode")
  except ValueError:
   print("Not a valid mode")

Вот финальный скрипт

import random

print("Welcome to the Password Generator")

all_chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"


def generate_password(chars):
 while True:
  try:
   password_length = int(input("How long should the password be?: "))
   password_count = int(input("How many passwords should be generated?: "))
   if password_length < 6 or password_length > 35:
    print("The length should be between 6 and 35")
   elif password_length >= 6 or password_length <= 35:
    break
  except ValueError:
   print("Not a valid number")

 for i in range(password_count):
  password = ""
  for z in range(password_length):
   random_char = random.choice(chars)
   password += random_char
  print(password)
  print("-" * len(password))
 print("Thank you for using the program!")


def main():
 while True:
  try:
   mode = int(input("For default character list, please enter 1 \nFor custom character list, please enter 2\nmode: "))
   if mode == 1:
    generate_password(all_chars)
    break
   if mode == 2:
    while True:
     custom_character_list = input("Please enter your custom charcaters: ")
     if " " in custom_character_list:
      print(("Can't use spaces in character list", "red"))
     else:
      break
    generate_password(custom_character_list)
    break
   else:
    print("Not a valid mode")
  except ValueError:
   print("Not a valid mode")


if __name__ == "__main__":
 main()

Тестирование

Наконец, просто вызовите основную функцию и посмотрите, что произойдет, вот результат на моем экране.

Успех! Это сработало, и теперь у меня есть генератор паролей, которым я могу пользоваться.

Надеюсь, вам понравилось читать эту статью!

Если у вас есть время, подпишитесь на меня в Twitter и Medium! Спасибо!

twitter.com/davidhayrapet

https://medium.com/@networkdavit