Passwortgenerator (mit GUI)

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Benutzeravatar
pixewakb
User
Beiträge: 1413
Registriert: Sonntag 24. April 2011, 19:43

Ich habe mir ein kleines Programm geschrieben, was mir bei Bedarf eine Liste mit zufälligen Passwörtern ausgibt. Das Passwort wird aus Klein- und Großbuchstaben sowie Ziffern gebildet. Ich verwende bereits Python 3.1; möglicherweise müsst ihr die Zeile gui.iconbitmap(default='password.ico') rausnehmen.

Code: Alles auswählen

import random
import string
from tkinter import *

bereich = string.digits + string.ascii_letters

def PasswortGenerator():
    for j in range(0,10):
        password = ''
        for i in range(0,10):
            
            text = random.choice(bereich)
            password = password + text

        password = password + '\n'
        Feld.insert(END, password)

    

gui = Tk()
gui.title('Passwortgenerator')
gui.iconbitmap(default='password.ico')

scrollbar = Scrollbar(gui)
scrollbar.pack(side=RIGHT, fill=Y)

Feld = Text(gui,width='50', height='25', yscrollcommand=scrollbar.set)
Feld.pack(fill=BOTH, expand=1)

scrollbar.config(command=Feld.yview)

PasswortButton = Button(gui,text='Start',command=PasswortGenerator)
PasswortButton.pack(side=LEFT)

ExitButton = Button(gui, text='Beenden',command=gui.destroy)
ExitButton.pack(side=RIGHT)

gui.mainloop()
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Wenn du willst, kann du zufällige Passwörter auch in einer Zeile generieren (siehe unten). Ich würde auch empfehlen, Programmlogik (das Generieren der Passwörter) und Darstellung (das GUI) strikt zu trennen. Mache "PasswortGenerator" lieber zu einer Funktion "generiere10Passwörter" (oder eine, die die Anzahl als Parameter nimmt), die eine Liste zurück gibt. Setze dann das Feld außerhalb der Funktion.

Code: Alles auswählen

def generierePasswort():
    return "".join(random.choice(bereich) for i in range(random.randrange(6, 10)))

def generierePasswörter(n):
    return [generierePasswort() for i in range(n)]

Feld.insert(END, "\n".join(generierePasswörter(10)))
Stefan

PS: Ich freue mich schon auf die Diskussion, ob man einen Umlaut in einem Funktionnamen haben sollte ;) In Python 3 ist das jedenfalls kein Problem mehr - und wenn schon Deutsch, dann bitte richtig geschrieben. Unicode macht's möglich.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

sma: Magst du random.sample nicht? Die Funktion "generierPasswörter" würde ich als Generator schreiben und den unbenutzten Namen i zu _ umbenennen, damit klar ist, dass dieses Objekt nicht verwendet wird.
lunar

@derdon: "random.sample()" kann man nicht zur Erzeugung zufälliger Passwörter nutzen, da die Elemente ohne Wiederholung gezogen werden:
Return a k length list of unique elements chosen from the population sequence.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Stimmt, daran habe ich nicht gedacht. Problematisch wird das ja vor allem, wenn "k" größer als "population" ist, also mit anderen Worten die Länge des Passwortes länger als die Anzahl aller zugelassenen Zeichen ist.
Antworten