Создание случайного пароля пользователя

Для того , чтобы создать случайный пароль пользователя , можно использовать символы , представленные в string модуле. В частности punctuation для знаков пунктуации, ascii_letters для букв и digits для цифр:

 from string import punctuation, ascii_letters, digits

 

Затем мы можем объединить все эти символы в имени с именем symbols :

 symbols = ascii_letters + digits + punctuation

 

Удалите любой из них, чтобы создать пул символов с меньшим количеством элементов.

После этого, мы можем использовать random.SystemRandom для генерации пароля. Для пароля длиной 10:

 secure_random = random.SystemRandom()
password = "".join(secure_random.choice(symbols) for i in range(10))
print(password)  # '^@g;J?]M6e'

 

Обратите внимание , что другие процедуры , сделанные немедленно доступны в random модуле - такие , как random.choice , random.randint и т.д. - не подходит для криптографических целей.

За кулисами, эти процедуры использовать Вихрь Мерсенна ПСЧ , который не удовлетворяет требованиям , предъявляемым к CSPRNG . Таким образом, в частности, вам не следует использовать какие-либо из них для создания паролей, которые вы планируете использовать. Всегда используйте экземпляр SystemRandom , как показано выше.

Начиная с Python 3.6 доступен модуль `секреты`, который предоставляет криптографически безопасную функциональность. Процитировав [официальную документацию] [pydoc-secrets-3.6], чтобы сгенерировать * "десятибуквенный буквенно-цифровой пароль, содержащий как минимум один символ в нижнем регистре, как минимум один символ в верхнем регистре и как минимум три цифры", * вы можете: импортировать строку alphabet = string.ascii_letters + string.digits, а True: пароль = '' .join (выбор (алфавит) для i в диапазоне (10)) if (любой (c.islower () для c в пароле) и любой (c. isupper () для c в пароле) и sum (c.isdigit () для c в пароле)> = 3): break