• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

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

Для начала вставим в шапку кодировку и версию питона. Импортируем модуль random для генерации случайной последовательности. Зададим переменную chars и вобьём буквы в разном регистре, цифры и какие-нибудь спецсимволы для получения максимально взломостойкого пароля.
Python:
# -*- coding:utf -8 -*-
#!/usr/bin/python3

import random

chars = '+-/*!&$#?=@<>abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
Чтобы программа тупо не генерила один пароль или строго заданное количество, разрешим пользователю самому решать сколько паролей он хочет сгенерировать. Кроме этого дадим возможность определять и длину пароля.
Python:
number = input('количество паролей?'+ "\n")
length = input('длина пароля?'+ "\n")
number = int(number)
length = int(length)
Осталось добавить самое главное - цикл случайной генерации символов, букв и цифр из нашей переменной, согласно параметрам введённым пользователем.
Python:
for n in range(number):
    password =''
    for i in range(length):
        password += random.choice(chars)
    print(password)
Вот собственно и всё - простой генератор сложных паролей готов.
Код полностью:

Python:
# -*- 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

Platinum
05.08.2018
1 081
2 474
BIT
14
Вы последнюю строку кода не вставили root.mainloop() без неё ничего не заработает.
 

AlexStep

Member
31.01.2021
7
0
BIT
0
Все вставил точно, вот скрин:
 

Вложения

  • 1.png
    1.png
    73,5 КБ · Просмотры: 193

explorer

Platinum
05.08.2018
1 081
2 474
BIT
14
В чём конкретно вопрос? Кто вообще код GUI-программы в консоль вставляет. Сделайте файл с любым названием, например generator.py и запустите в консоли python generator.py
 

AlexStep

Member
31.01.2021
7
0
BIT
0
Все понял, я балбес))). Можно ещё вопрос по расчету количества возможных паролей при например цифрах без 0 и букв английского алфавита большими.
 

explorer

Platinum
05.08.2018
1 081
2 474
BIT
14
Все понял, я балбес))). Можно ещё вопрос по расчету количества возможных паролей при например цифрах без 0 и букв английского алфавита большими.

Вот простейшая программа для подсчёта комбинаций. В переменной x пишете нужные символы.


Python:
def choose_symbols():
    print("Подсчёт комбинаций\n")
    x = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789')
    return x


def check(mix):
    numbers = input('Количество символов в слове: ')
    if numbers == '0':
        print("Ошибка! Введите целое число больше нуля!")
        return check(mix)
    elif numbers.isdigit():
        print('Количество комбинаций:', len(mix)**int(numbers))
    else:
        print("Ошибка! Введите целое число больше нуля!")
        return check(mix)


if __name__ == "__main__":
    check(choose_symbols())
 

AlexStep

Member
31.01.2021
7
0
BIT
0
Я положу сюда готовые файлы, гляньте почему не работают, нужные буквы и цифры я оставил. либо помогите доделать эти файлы и снова сюда положите я заберу ну и все кому нужно тоже.Спасибо.
 

Вложения

  • 1.zip
    1,4 КБ · Просмотры: 154
Последнее редактирование:

nks1ck

Green Team
02.11.2020
223
106
BIT
0
Можно юзать import string. Не надо будет этого хардкода с chars
 

azm9s

New member
07.01.2022
1
0
BIT
0
Ну раз я сам заикнулся о варианте с сохранением в файл, то решил добавить эту функцию в программу. Теперь можно сгенерированные списки паролей сохранять.
Python:
# -*- 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()
Посмотреть вложение 22189
А как тут задать обязательное условие не менее одной цифры и буквы в верхнем регистре?
не все пароли генерируются с использованием цифр и регистра.
 

Pernat1y

Red Team
05.04.2018
1 443
135
BIT
0
А как тут задать обязательное условие не менее одной цифры и буквы в верхнем регистре?
не все пароли генерируются с использованием цифр и регистра.
Можно проверять регексом. Если не прошло - перегенерировать.
 

pa_l4ch

New member
02.12.2022
1
0
BIT
0
У меня это работает так:

количество паролей?
2
длина пароля?
5
*
*D
*DG
*DGv
*DGvf
w
we
we1
we1N
we1NZ
[Program finished]

Как убрать те, что короче пяти символов?
Должно быть так:

import time, os, random

chrs = '+-/*!&$#?=@<>abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'

file = open("test.txt", "w", encoding="utf-8")

number = int(input(" Кол-во паролей: "))
length_pass = int(input(" Длина пароля: "))

for n in range(number):
password =''
for i in range(length_pass):
password += random.choice(chrs)
if len(password) == length_pass:
password += "\n"
print(password)
file.write(password)
file.close()
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!