Как сделать генератор случайных паролей в python
Перейти к содержимому

Как сделать генератор случайных паролей в python

  • автор:

Генератор паролей на python

Не так давно стал изучать python и сейчас пытаюсь сделать первый пет-проект как генератор паролей. Основную функцию выполняет хорошо, но развить его дальше не могу. Мне нужно, чтобы изначально был выбор: сделать пароль автоматически, либо самостоятельно указывать необходимые регистры(цифры, буквы заглавные/прописные, спец. символы). Изначально делал на обычных if, сейчас пробую реализовать через for, но что-то делаю неверно и в итоге приходится постоянно лично указывать используемые символы.

from random import choice digits = '0123456789' uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' lowercase = 'abcdefghijklmnopqrstuvwxyz' punctuation = '!#$%&*+-=?@^_' ally = digits + uppercase + lowercase + punctuation chars = '' pwd_pass = ['pwd_auto', 'pwd_digits', 'pwd_uppercase', 'pwd_lowercase', 'pwd_punctuation'] pwd_length = int(input('Введите желаемую длину пароля: ')) pwd_auto = input('Сгенерировать пароль автоматически? (y, n): ') pwd_digits = input('Включить цифры (y, n): ') pwd_uppercase = input('Включить uppercase (y, n): ') pwd_lowercase = input('Включить цифры (y, n): ') pwd_punctuation = input('Включить спец. символы (y, n): ') for i in pwd_pass: if pwd_auto == 'y': chars += ally break else: if pwd_digits == 'y': chars += digits if pwd_uppercase == 'y': chars += uppercase if pwd_lowercase == 'y': chars += lowercase if pwd_punctuation == 'y': chars += punctuation password = '' for i in range(pwd_length): password += choice(chars) print('\n', password, '\n', sep='') 

Отслеживать

задан 6 ноя 2021 в 12:24

1 1 1 серебряный знак 7 7 бронзовых знаков

Пожалуйста, уточните вашу конкретную проблему или приведите более подробную информацию о том, что именно вам нужно. В текущем виде сложно понять, что именно вы спрашиваете.

ildarkhasanshin / password.py

Save ildarkhasanshin/aec24c301e9a2aaf5830444ccab0a4e5 to your computer and use it in GitHub Desktop.

Генератор паролей Python

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

import random
num = input ( ‘login ‘ )
pas = »
for x in range ( 16 ): #Количество символов (16)
pas = pas + random . choice ( list ( ‘1234567890abcdefghigklmnopqrstuvyxwzABCDEFGHIGKLMNOPQRSTUVYXWZ’ )) #Символы, из которых будет составлен пароль
print ( ‘Hello, ‘ , num , ‘your password is: ‘ , pas )

Статья Пишем простой генератор сложных паролей

Тема не новая, генераторов существует множество, однако такой простой код и глазу приятен, и место не занимает.

Для начала вставим в шапку кодировку и версию питона. Импортируем модуль random для генерации случайной последовательности. Зададим переменную chars и вобьём буквы в разном регистре, цифры и какие-нибудь спецсимволы для получения максимально взломостойкого пароля.

# -*- coding:utf -8 -*- #!/usr/bin/python3 import random chars = '+-/*!&$#?=@<>abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'

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

number = input('количество паролей?'+ "\n") length = input('длина пароля?'+ "\n") number = int(number) length = int(length)

Осталось добавить самое главное — цикл случайной генерации символов, букв и цифр из нашей переменной, согласно параметрам введённым пользователем.

for n in range(number): password ='' for i in range(length): password += random.choice(chars) print(password)

Вот собственно и всё — простой генератор сложных паролей готов.
Код полностью:

# -*- coding:utf -8 -*- #!/usr/bin/python3 import random chars = '+-/*!&$#?=@<>abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890' number = input('количество паролей?'+ "\n") length = input('длина пароля?'+ "\n") number = int(number) length = int(length) for n in range(number): password ='' for i in range(length): password += random.choice(chars) print(password)

Результат работы:

pas.png

Не нужно искать сложных путей, если есть простые решения

explorer

Well-known member
Platinum

  • Сообщения 1 081
  • Реакции 2 474
Азиз

Green Team
30.05.2018 224 74 BIT 0

Тема не новая, генераторов существует множество, однако такой простой код и глазу приятен, и место не занимает.

Для начала вставим в шапку кодировку и версию питона. Импортируем модуль random для генерации случайной последовательности. Зададим переменную chars и вобьём буквы в разном регистре, цифры и какие-нибудь спецсимволы для получения максимально взломостойкого пароля.

# -*- coding:utf -8 -*- #!/usr/bin/python3 import random chars = '+-/*!&$#?=@<>abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'

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

number = input('количество паролей?'+ "\n") length = input('длина пароля?'+ "\n") number = int(number) length = int(length)

Осталось добавить самое главное — цикл случайной генерации символов, букв и цифр из нашей переменной, согласно параметрам введённым пользователем.

for n in range(number): password ='' for i in range(length): password += random.choice(chars) print(password)

Вот собственно и всё — простой генератор сложных паролей готов.
Код полностью:

# -*- coding:utf -8 -*- #!/usr/bin/python3 import random chars = '+-/*!&$#?=@<>abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890' number = input('количество паролей?'+ "\n") length = input('длина пароля?'+ "\n") number = int(number) length = int(length) for n in range(number): password ='' for i in range(length): password += random.choice(chars) print(password)

Не нужно искать сложных путей, если есть простые решения

С меня плюсик. И еще, во избежания лишних строк кода — советую:

number = input('количество паролей?'+ "\n") length = input('длина пароля?'+ "\n") number = int(number) length = int(length)
number = int(input('количество паролей?'+ "\n")) length = int(input('длина пароля?'+ "\n"))

Не нужно искать сложных путей, если есть простые решения
Последнее редактирование: 01.09.2018

NeskO

Green Team
10.01.2018 115 52 BIT 3

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

explorer

Platinum
05.08.2018 1 081 2 474 BIT 14

number = int(input('количество паролей?'+ "\n")) length = int(input('длина пароля?'+ "\n"))

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

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

explorer

Platinum
05.08.2018 1 081 2 474 BIT 14

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

В общем пошаманил, и получил следующий код на выходе:

# -*- coding:utf -8 -*- #!/usr/bin/python3 from tkinter import * import random import string root = Tk() root.resizable(width=False, height=False) root.title("Генератор паролей") root.geometry("420x338+300+300") calculated_text = Text(root,height=15, width=50) def erase(): calculated_text.delete('1.0', END) chars = '+-/*!&$#?=@<>abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890' def password(): for n in range(int(number_entry.get())): password ='' for i in range(int(length_entry.get())): password += random.choice(chars) calculated_text.insert(END, password + "\n") display_button = Button(text="Сгенерить", command=password) erase_button = Button(text="Очистить", command=erase) number_entry = Entry(width=10, justify=CENTER) length_entry = Entry(width=10, justify=CENTER) number_entry.insert(0, "8") length_entry.insert(0, "25") number_label = Label(text=" Количество паролей") length_label = Label(text=" Длина пароля") number_label.grid(row=0, column=0, sticky="w") length_label.grid(row=1, column=0, sticky="w") number_entry.grid(row=0,column=1, padx=1, pady=5) length_entry.grid(row=1,column=1, padx=1, pady=5) display_button.grid(row=2, column=0, padx=5, pady=5, sticky="e") erase_button.grid(row=2, column=2, padx=15, pady=5, sticky="w") calculated_text.grid(row=4, column=0, sticky='nsew', columnspan=3) scrollb = Scrollbar(root, command=calculated_text.yview) scrollb.grid(row=4, column=4, sticky='nsew') calculated_text.configure(yscrollcommand=scrollb.set) root.mainloop()

gen.png

Valkiria

Количество паролей — 5
Количество символов — 18.
А получилась какая-то каша.

Это тест на внимательность ?

explorer

Platinum
05.08.2018 1 081 2 474 BIT 14

Количество паролей — 5
Количество символов — 18.
А получилась какая-то каша.

Это тест на внимательность ?

Ну если тест на внимательность — то внимательнее читать нужно ))) ВЫше написано — можно сразу в одном окне набить паролей разной длины. Что на скрине и видно, сначала 25 знаков, потом 18. Чтобы каши не было, есть кнопка «очистить».

Азиз

Green Team
30.05.2018 224 74 BIT 0

Советую добавить немного отступов, и ещё добавить типо:

Пароль 1 — 7377283891
Пароль 2 — hsjsjaklaji28

Так все будет намного понятней

explorer

Platinum
05.08.2018 1 081 2 474 BIT 14

Советую добавить немного отступов, и ещё добавить типо:

Пароль 1 — 7377283891
Пароль 2 — hsjsjaklaji28

Так все будет намного понятней

Любые разделители можно по желанию поставить отредактировав строку 23. Пронумеровать тоже можно, но тогда нумерация будет повторяться с каждым новым циклом.

z3RoTooL

Grey Team
28.02.2016 803 696 BIT 7

а вот мой вариант )

┌─╼[~] └────╼ cat /bin/passgen read -p "Длинна пароля: " number echo pwgen -sncB -1 "$number" 10 echo
fuzscore

Grey Team
21.09.2016 77 181 BIT 0
а почему не добавить при каждой новой генерации очистку предыдущей?

explorer

Platinum
05.08.2018 1 081 2 474 BIT 14
а почему не добавить при каждой новой генерации очистку предыдущей?

Я так задумал просто, чтобы именно разной длины набить сразу в окно можно было. А если это не понадобится, то сделал кнопку «очистить».
Все мы по разному воспринимаем и мыслим
А так кучу всего другого можно туда добавить — например отправку в текстовый файл, чтобы ручками не копипастить и т.д.

Tayrus

Red Team
13.04.2017 365 787 BIT 6
Решил написать свой вариант:

import datetime import base64 import random def Revers(string): string = string[::-1] return string def CorrectPass(password): for x in password: password = password.replace(x,"") if len(password) == passwordlen: break return password #Get data timer = datetime.datetime.now() #Morph str timer = str(timer) timer = timer.replace('-','') timer = timer.replace(' ','') timer = timer.replace(':','') timer = timer.replace('.','') #Revers or not realrandom = random.choice([1,2]) if realrandom == 1: timer = Revers(timer) #Encode str timer = base64.b64encode(bytes(timer, "utf-8")) #Morph timer = str(timer) timer = timer.replace("b'","") timer = timer.replace("='","") #Len passwordlen = 15 #Change this if passwordlen != len(timer): timer = CorrectPass(timer) #Check while True: #Если в выводе ничего не получили, то запустите скрипт еще раз, до тех пор пока не получите. if timer == '': timer = CorrectPass(timer) break print (timer)
explorer

Platinum
05.08.2018 1 081 2 474 BIT 14
Решил написать свой вариант

Я уж было обрадовался, что кто-то ещё свои творения выкладывает, но к сожалению консольный скрипт получился длиннющий, не всегда срабатывает, и длина пароля жёстко задана, и выдаёт в 1 экземпляре.

z3RoTooL

Grey Team
28.02.2016 803 696 BIT 7

сделал своё творение немного приятней глазу

┌─╼[~] └────╼ cat /bin/passgen #!/bin/bash # Скрипт генератор паролей pwgen + параметры запуска echo echo  Генератор паролей pwgen с параметрами запуска echo echo ∗ Генерировать полностью случайные пароли echo ∗ Включить хотя бы один номер в пароле echo ∗ Включить хотя бы одну заглавную букву в пароле echo ∗ Не включать двусмысленные символы в пароле echo read -p "⏵ Введите кол-во символов для пароля: " number echo ──────────────────────╼ pwgen -1sncB "$number" 10 echo ──────────────────────╼

emD7qdS.png

Tayrus

Red Team
13.04.2017 365 787 BIT 6

Я уж было обрадовался, что кто-то ещё свои творения выкладывает, но к сожалению консольный скрипт получился длиннющий, не всегда срабатывает, и длина пароля жёстко задана, и выдаёт в 1 экземпляре.

Длину пароля можно поменять(там комментарий измени меня), а размер скрипта имеет значение(это глупо сравнить качество по количеству строк в коде)? Мне лень было фиксить эту проблему(не всегда срабатывает).

explorer

Platinum
05.08.2018 1 081 2 474 BIT 14

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

# -*- coding:utf -8 -*- #!/usr/bin/python3 __version__ = 'Version: 1.1' from tkinter import * import random import string from tkinter import filedialog as fd root = Tk() root.resizable(width=False, height=False) root.title("Генератор паролей " +str(__version__)) root.geometry("450x324+300+300") calculated_text = Text(root,height=14, width=50) def erase(): calculated_text.delete('1.0', END) chars = '+-/*!&$#?=@<>abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890' def password(): for n in range(int(number_entry.get())): password ='' for i in range(int(length_entry.get())): password += random.choice(chars) calculated_text.insert(END, password + "\n") def savepass(): file_name = fd.asksaveasfilename(filetypes=(("TXT files", "*.txt"), ("All files", "*.*")),defaultextension='') f = open(file_name, 'w') s = calculated_text.get(1.0, END) f.write(s) f.close() display_button = Button(text="Сгенерить", command=password) erase_button = Button(text="Очистить", command=erase) save = Button(text="Сохранить", command=savepass) number_entry = Entry(width=10, justify=CENTER) length_entry = Entry(width=10, justify=CENTER) number_entry.insert(0, "8") length_entry.insert(0, "25") number_label = Label(text=" Количество паролей") length_label = Label(text=" Длина пароля") number_label.grid(row=0, column=0, sticky="w") length_label.grid(row=1, column=0, sticky="w") number_entry.grid(row=0,column=1, padx=1, pady=5) length_entry.grid(row=1,column=1, padx=1, pady=5) save.grid(row=3, column=2, padx=50, pady=5, sticky="w") display_button.grid(row=3, column=0, padx=30, pady=5, sticky="e") erase_button.grid(row=3, column=1, padx=30, pady=5, sticky="e") scrollb = Scrollbar(root, command=calculated_text.yview) scrollb.grid(row=4, column=3, sticky='nsew') calculated_text.grid(row=4, column=0, sticky='nsew', columnspan=3) calculated_text.configure(yscrollcommand=scrollb.set) root.mainloop()

Как создать генератор паролей на Python

Узнайте, как создать простой и полезный генератор паролей на Python, используя стандартные библиотеки, всего за 3 шага!

Алексей Кодов
Автор статьи

Баннер Баннер

23 июня 2023 в 18:51

Генератор паролей — это полезный инструмент, который помогает создать сложные и уникальные пароли для различных аккаунтов. В этой статье мы рассмотрим, как создать простой генератор паролей на Python, используя стандартные библиотеки.

Шаг 1: Импортировать необходимые модули

Для создания генератора паролей нам потребуются следующие модули:

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

Шаг 2: Определить функцию для генерации пароля

Теперь определим функцию generate_password() , которая принимает длину пароля в качестве аргумента и возвращает сгенерированный пароль.

def generate_password(length): characters = string.ascii_letters + string.digits + string.punctuation password = ''.join(random.choice(characters) for _ in range(length)) return password

В этой функции мы объединяем все возможные символы в одну строку и затем случайно выбираем символы из этой строки для создания пароля.

Шаг 3: Получить пользовательский ввод и сгенерировать пароль

Запросим у пользователя желаемую длину пароля и сгенерируем пароль с помощью нашей функции.

password_length = int(input("Введите желаемую длину пароля: ")) generated_password = generate_password(password_length) print("Ваш сгенерированный пароль:", generated_password)

Пример работы генератора паролей

При выполнении кода пользователь вводит длину пароля, и на выходе получает сгенерированный пароль.

Введите желаемую длину пароля: 12 Ваш сгенерированный пароль: a5B$!pL&3mQ* 

�� Теперь у вас есть простой генератор паролей на Python! Вы можете улучшить его, добавив дополнительные функции, такие как проверка сложности пароля или возможность выбора типов символов для использования в пароле.

Не забудьте изучать дополнительные материалы и практиковаться в программировании на Python, чтобы стать опытным разработчиком. Удачи вам в дальнейшем обучении!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *