Elegante Zufallszeichen

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
christheturtle
User
Beiträge: 42
Registriert: Sonntag 29. September 2019, 12:36

Hallo ihr Lieben,

für einen Passwortgenerator würde ich gern zufällige* Buchstaben / Sonderzeichen / Zahlen generieren. Bisher löse ich das mithilfe einer Liste, die alle Zeichen enthält, aus der dann ein zufälliges Element ausgewählt wird.

Habt ihr Erfahrungen mit Modulen, die das Erzeugen von Zufallszeichen vll etwas eleganter lösen?

Danke!

Chris
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wenn Du das mit `secrects.choice()` machst und nicht irgendwie komplizierter oder unsicherer, wüsste ich nicht wie man das eleganter hinbekommt.

Es muss übrigens keine Liste sein, jede Sequenz geht, also auch eine Zeichenkette mit den Zeichen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Eventuell reicht auch secrets.token_urlsafe(). Das wäre ein einzelner Aufruf. Kommt halt auf den Zusammenhang an, in dem das verwendet werden soll. Wobei das aufgrund seines Verwendungszwecks nur eine sehr begrenzte Anzahl von Sonderzeichen liefert und damit für einen Passwort-Generator recht limitiert wäre...
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Alternativ kann man sich auch was mit random.choices() basteln:

Code: Alles auswählen

from random import choices
from string import printable

def make_password(n=16, characters=printable.strip()):
    return ''.join(choices(characters, k=n))

def main():
    for _ in range(10):
        print(make_password())

if __name__ == '__main__':
    main()
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

@snafu: Warum sollte man random benutzen, wenn es mit secrets wirkliche Zufallszahlen gibt?
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Gibt es mit `random` in der Regel auch. `secrets` stellt ja nur *sicher* dass da ein `random.SystemRandom` hinter den Funktionen steckt. Was es bei `random` nur tut wenn es ein `SystemRandom` gibt. Wenn es das nicht gibt, dann funktioniert `secrets` aber (auch) nicht.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

secrets beruht ja im Wesentlichen auch auf dem random-Modul und verknüpft das mit Funktionalität aus ein paar weiteren APIs. Schaut man in den Quelltext des Moduls, sieht man dass da nicht allzu viel "Eigenes" passiert. Ich weiß ja nicht, ob da für die Zukunft noch mehr geplant ist, aber bisher ist das IMHO kaum ein eigenes Modul wert. Daher hatte mich der Hinweis auf "wirkliche" Zufallszahlen, die das random-Modul demzufolge ja nicht bieten würde, auch etwas irritiert... ;)
christheturtle
User
Beiträge: 42
Registriert: Sonntag 29. September 2019, 12:36

Ich danke euch für die vielen Antworten! secrects.choice() scheint tatsächlich genau das zu sein, was ich gesucht habe!
Antworten