Password Generator

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Benutzeravatar
mp1337
User
Beiträge: 23
Registriert: Dienstag 5. Mai 2020, 16:33
Kontaktdaten:

Hallo zusammen =)

Da ich keinen Passwort-Generator mit Gui für Ubuntu gefunden habe, habe ich beschlossen
selber einen zu programmieren. Da ich noch unerfahren bin, würde ich mich über Verbesserungsvorschläge freuen (Code Style etc.)
Vielleicht möchte auch Jemand mitwirken =)

Bild

https://github.com/MP1337/PGEN_Simple_P ... _Generator

LG
Peter
IT-News ohne Werbung
https://www.it-feedo.de
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

In Zeilen 40-41 möchtest du eigentlich `random.sample()` verwenden.

Darüberhinaus gehören Passwörter zu der Kategorie von Dingen die man vielleicht lesen und irgendwo eintippen muss, z.B. das Default WLAN Password für deinen Router. Bei solchen Dingen macht es Sinn das Alphabet auf Zeichen einzuschränken die nicht verwechselbar sind wie es z.B. l und I oder O und 0 in machen Schriften sind.
Benutzeravatar
mp1337
User
Beiträge: 23
Registriert: Dienstag 5. Mai 2020, 16:33
Kontaktdaten:

Vielen Dank! Wieder was neues gelernt. Werde ich gleich umsetzen 👍
IT-News ohne Werbung
https://www.it-feedo.de
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

@DasIch: random.sample hat keine Wiederholungen, ist also falsch.

@mp1337: Dass man keine Abkürzungen verwenden sollte, gilt auch für Module, pgen -> password_generator.
Außer bei None und wenn man wirklich die Objektgleichheit testen will, nimmt man ›is‹, für alle anderen Fälle ist das ein Fehler und == das richtige. Nur bei True braucht man gar nichts, bei False nimmt man ›not‹.
An eine Variable sollte man immer nur einen Typ binden, nicht mal einen Wahrheitswert und dann einen String.

Code: Alles auswählen

def generate_password(password_length=10, letters=False, digits=False, special=False):
    """Generating strong random passwords using
       ASCII_LETTERS, DIGITS and SPECIAL_CHAR.
       int for password length. default  len of
       10 characters.
    """
    characters = ""
    if letters:
        characters += ASCII_LETTERS
    if digits:
        characters += DIGITS
    if special:
        characters += SPECIAL_CHAR

    if not characters:
        characters = ASCII_LETTERS + DIGITS + SPECIAL_CHAR
    return "".join(random.choices(characters, k=password_length))
In `main`: os.system sollte man schon lange nicht mehr verwenden, und ein clear nervt nur jeden, der ein Konsolenprogramm startet. Also einfach weglassen.
`password_len` ist eine Zahl und damit niemals ein leerer String.

Code: Alles auswählen

def main():
    """Generate Password on module start"""
    try:
        password_length = int(input("# Password length: "))
    except ValueError:
        print("Input must be INTEGER, using default Values")
        password_length = 10
    print(generate_password(password_length))
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

Zur GUI: initui ist überfüssig, da man den Code auch direkt in __init__ schreiben kann.
`button_generate` ist überflüssig, weil man direkt generate_password angeben kann.
`button_close` ist falsch, weil man nicht direkt sys.exit aufrufen sollte, sondern einfach nur das Fenster schließen kann.
In `generate_password` sollte letter, digits und special lokale Variablen sein, keine Attribute.
_pass_len -> password_length. Benutze elif und else. \ ist in Deinen Fällen unnötig.

Code: Alles auswählen

    def generate_password(self):
        """Generating passwords and filling listWidget"""
        self.listWidget.clear()
        letters = self.checkLetters.isChecked()
        digits = self.checkDigits.isChecked()
        special = self.checkSpecial.isChecked()

        try:
            password_length = int(self.lenText.text())
        except ValueError:
            password_length = 10

        for _ in range(17):
            self.listWidget.addItem(
                generate_password(password_length, letters, digits, special)
            )
        color = "red" if password_length < 8 else "orange" if password_length < 10 else "lime"
        self.lineStrongness.setStyleSheet(f"background-color: {color};")
Benutzeravatar
mp1337
User
Beiträge: 23
Registriert: Dienstag 5. Mai 2020, 16:33
Kontaktdaten:

Vielen Dank für euer Feedback! Hab dank euch echt viel gelernt =)

Code: Alles auswählen

color = "red" if password_length < 8 else "orange" if password_length < 10 else "lime"
Solche Beispiele habe ich noch in keinem Buch gesehen... Wusste nicht, dass man alles in einer Zeile schrieben kann.
Muss noch so viel lernen...
IT-News ohne Werbung
https://www.it-feedo.de
Antworten