Seite 1 von 1

Password Generator

Verfasst: Freitag 18. September 2020, 21:43
von mp1337
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

Re: Password Generator

Verfasst: Samstag 19. September 2020, 12:05
von DasIch
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.

Re: Password Generator

Verfasst: Samstag 19. September 2020, 13:08
von mp1337
Vielen Dank! Wieder was neues gelernt. Werde ich gleich umsetzen 👍

Re: Password Generator

Verfasst: Samstag 19. September 2020, 13:17
von Sirius3
@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))

Re: Password Generator

Verfasst: Samstag 19. September 2020, 13:29
von Sirius3
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};")

Re: Password Generator

Verfasst: Samstag 19. September 2020, 15:08
von mp1337
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...