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
Elegante Zufallszeichen
- __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.
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
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...
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()
- __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
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... 

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