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 =)
https://github.com/MP1337/PGEN_Simple_P ... _Generator
LG
Peter
Password Generator
IT-News ohne Werbung
https://www.it-feedo.de
https://www.it-feedo.de
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.
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.
Vielen Dank! Wieder was neues gelernt. Werde ich gleich umsetzen
IT-News ohne Werbung
https://www.it-feedo.de
https://www.it-feedo.de
@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.
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.
@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))
`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))
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.
`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};")
Vielen Dank für euer Feedback! Hab dank euch echt viel gelernt =)
Solche Beispiele habe ich noch in keinem Buch gesehen... Wusste nicht, dass man alles in einer Zeile schrieben kann.
Muss noch so viel lernen...
Code: Alles auswählen
color = "red" if password_length < 8 else "orange" if password_length < 10 else "lime"
Muss noch so viel lernen...
IT-News ohne Werbung
https://www.it-feedo.de
https://www.it-feedo.de