Zufälliges Passwort in Python3

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
anonym13

Hallo Freunde der Programmierung,

ich bin ganz neu in der Programmierung und habe nun Python 3 für mich entdeckt.
Dazu nutze ich die Online-IDE von Repl.it, die mir sehr gut gefällt. (Link: https://repl.it/languages/Python3)
Letzte Nacht kam mir die Idee, dass ich gerne einmal ein Programm schreiben wollen würde,
was mir ein zufälliges Passwort ausgibt, jedoch weiß ich nicht so recht, wie ich mit dem Programm anfangen soll, sowas aber auch!

Anfangen würde ich vermutlich damit, verschiedene Listen jeweils einmal mit Zahlen 0-9, Buchstaben A-Z und Sonderzeichen zu füllen.
Aber viel weiter reicht meine Vorstellungskraft aktuell nicht.
Ich denke, es wäre erstmal sinnvoll per IF-Abfrage die Anzahl der Zeichen abzufragen, und dann eine Ausgabe zu tätigen.

Wer gute Ideen und Lust hat einen Neuling zu unterstützen, so würde ich mich riesig freuen. :)

Mit freundlichen Grüßen
Der Mueller
Benutzeravatar
mp1337
User
Beiträge: 23
Registriert: Dienstag 5. Mai 2020, 16:33
Kontaktdaten:

Hi, hier die Funktion aus meinem Programm:

Code: Alles auswählen

import random

ASCII_LETTERS = 'AaBbCcDdEeFfGgHJKkLMmNnPpQqRrSsTtVvWwXxYyZz'
DIGITS = '123456789'
SPECIAL_CHAR = '!"§$%&/()=?#+-_.:,;<>~*[]{}'

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))

IT-News ohne Werbung
https://www.it-feedo.de
Benutzeravatar
noisefloor
User
Beiträge: 4194
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@mp1337: die Logik deiner Funktion ist komisch. Wenn letters und digits und special alle `False` sind, sollte man eigentlich erwarten, dass keine Passwort zurück geliefert wird und nicht alles benutzt wird.

Gruß, noisefloor
Benutzeravatar
mp1337
User
Beiträge: 23
Registriert: Dienstag 5. Mai 2020, 16:33
Kontaktdaten:

Eigentlich nicht. Wenn man nichts übergibt wird per Default ein sicheres Kennwort generiert.
IT-News ohne Werbung
https://www.it-feedo.de
Benutzeravatar
noisefloor
User
Beiträge: 4194
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

aber sicher

Code: Alles auswählen

def generate_password(password_length=10, letters=False, digits=False, special=False)
Wenn die benannten Argumente alle `False` sind, tut die Funktion so, als wären alle `True`. Das ist... sagen wir mal sehr unerwartet. Die drehst die Logik dann einfach um. Wenn alles `True` wäre, dann würde die Funktion ohne Argumente aufgerufen das machen, was sie jetzt macht.

Gruß, noisefloor
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

@mp1337: Und Oder anders ausgedrückt: Wenn ich explezit weder Buchstaben, Zahlen noch Sonderzeichen haben will: Warum bekomme ich dann ein Passwort?

Ich würde übrigens noch ändern, dass das Vorkommen von bestimmten Elementen im Passwort nicht nur möglich sondern auch sichergestellt ist. Im Moment könnte auch ein Passwort generiert werden, dass nur aus Buchstaben besteht, obwohl auch Zahlen gewollt sind.
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Hi,
Ich habe auch mal ein bisschen rumprobiert und dabei ist das hier rausgekommen (Vielleicht ein bisschen zu simpel aber wenn er nicht gut ist, ist ja auch nicht schlimm ;) )

Code: Alles auswählen

import random

Letters='QqWwEeRrTtZzUuIiOoPpÜüAaSsDdFfGgHhJjKkLlÖöÄäYyXxCcVvBbNnMm'
Zahlen='123456789'
Sonder='ß?!§$%&#*<>°'


Länge=input("Wie sicher soll das Passwort sein? Stufe 1,2 oder 3?")
if Länge=='3':
    for i in range(6):
        B=random.choice(Letters)
        Z=random.choice(Zahlen)
        S=random.choice(Sonder)
        print(B,Z,S)

if Länge == '2':
    for i in range(4):
        B=random.choice(Letters)
        Z=random.choice(Zahlen)
        S=random.choice(Sonder)
        print(B,Z,S)

if Länge == '1':
    for i in range(2):
        B=random.choice(Letters)
        Z=random.choice(Zahlen)
        S=random.choice(Sonder)
        print(B,Z,S)
Bin übrigens auch Neuling ;)...

Mfg
Christian
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Die Anzahl der Schleifendurchläufe könntest du auch mathematisch ausdrücken: range(int(stufe) * 2). Dann brauchst du nur eine Schleife. Und anstatt mehrere print()-Ausgaben hintereinander zu machen, würde man die Zeichen in einer Liste sammeln und dann via join() ausliefern.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Konstanten schreibt man komplett gross, Variablen komplett klein. Programmierer sind faul, daher mögen sie es nicht, wenn sie Code kopieren, sondern drücken das lieber durch eine einfache Formel aus:

Code: Alles auswählen

import random

LETTERS = 'QqWwEeRrTtZzUuIiOoPpÜüAaSsDdFfGgHhJjKkLlÖöÄäYyXxCcVvBbNnMm'
DIGITS = '123456789'
OTHERS ='ß?!§$%&#*<>°'

level = int(input("Wie sicher soll das Passwort sein? Stufe 1,2 oder 3?"))
length = level * 2
for _ in range(length):
    letter = random.choice(LETTERS)
    digit = random.choice(DIGITS)
    other = random.choice(OTHERS)
    print(letter, digit, other)
Warum gibt es keine Passwörter mit 0?
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Oh, stimmt xD
LeSchakal
User
Beiträge: 25
Registriert: Dienstag 5. Februar 2019, 23:40

Du könntest natürlich auch aus jeder gewünschten Gruppe ein zufälliges Element wählen, danach die restlichen Elemente mit random.choices finden und wenn du dann noch die beiden Listen zusammenmischt (mit Hilfe von random.shuffle), kann auch niemand mehr eine Ordnung erkennen.

Dann brauchst du gar keine Schleife.
Antworten