Seite 1 von 1
Elegante Zufallszeichen
Verfasst: Freitag 4. September 2020, 16:45
von christheturtle
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
Re: Elegante Zufallszeichen
Verfasst: Freitag 4. September 2020, 16:55
von __blackjack__
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.
Re: Elegante Zufallszeichen
Verfasst: Freitag 4. September 2020, 18:07
von snafu
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...
Re: Elegante Zufallszeichen
Verfasst: Freitag 4. September 2020, 19:25
von snafu
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()
Re: Elegante Zufallszeichen
Verfasst: Samstag 5. September 2020, 09:51
von Sirius3
@snafu: Warum sollte man random benutzen, wenn es mit secrets wirkliche Zufallszahlen gibt?
Re: Elegante Zufallszeichen
Verfasst: Samstag 5. September 2020, 13:19
von __blackjack__
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.
Re: Elegante Zufallszeichen
Verfasst: Samstag 5. September 2020, 13:28
von snafu
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...

Re: Elegante Zufallszeichen
Verfasst: Montag 7. September 2020, 15:18
von christheturtle
Ich danke euch für die vielen Antworten! secrects.choice() scheint tatsächlich genau das zu sein, was ich gesucht habe!