Wie kann ich eine zufällige Zahl, die kryptographisch sicher in python?
Mache ich ein Projekt in python, und ich möchte eine zufällige Zahl, die kryptografisch sichere, Wie kann ich das tun? Ich habe online gelesen, dass die zahlen, die durch die regelmäßige randomizer sind nicht kryptographisch sicher sind, und dass die Funktion os.urandom(n)
gibt mir ein string und keine Zahl.
Die Antwort, die Sie bekam ist der richtige Einstieg, aber Sie müssen genau definieren, was du meinst mit "eine Zahl". Ein float? Ein integer? Signed oder unsigned? Welcher Bereich? Etc.
Ich habe schon bekommen, meine Antwort, aber meine intenton war und integer (sollte erwähnt haben, dass). gibt es eine Möglichkeit zum festlegen eines bestimmten Bereichs in der Vermutung, dass thefourtheye gemacht hat?
Können Sie bitte überprüfen, ob meine aktualisierte Antwort wird sein, okay?
es ist in Ordnung so weit wie es geht 😉 ich habe eine andere Antwort, die auf eine einfachere Methode.
Es gibt keine kryptographisch sicheren Zufallszahlen, aber eine zufällige Zahl generator kann kryptographisch sicher. 😉
Ich habe schon bekommen, meine Antwort, aber meine intenton war und integer (sollte erwähnt haben, dass). gibt es eine Möglichkeit zum festlegen eines bestimmten Bereichs in der Vermutung, dass thefourtheye gemacht hat?
Können Sie bitte überprüfen, ob meine aktualisierte Antwort wird sein, okay?
es ist in Ordnung so weit wie es geht 😉 ich habe eine andere Antwort, die auf eine einfachere Methode.
Es gibt keine kryptographisch sicheren Zufallszahlen, aber eine zufällige Zahl generator kann kryptographisch sicher. 😉
InformationsquelleAutor user2835118 | 2014-01-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie eine Liste von Zufallszahlen, indem nur die Anwendung
ord
Funktion im Laufe der bytes zurückgegebenos.urandom
, wie dieseZitieren
os.urandom
Dokumentation,urandom
ist wirklich geeignet für die kryptographische Verwendung, anscheinend ist es.wenn ich nur einen benötigen, ist es ausreichend, ändern Sie das argument in
os.urandom
1? alsoos.urandom(1)
InformationsquelleAutor thefourtheye
Da, die Sie generieren möchten Ganzzahlen in einigen spezifischen Bereich, ist es viel einfacher, den
random.SystemRandom
Klasse statt. Erstellen Sie eine Instanz der Klasse gibt Sie ein Objekt, welches alle Methoden derrandom
- Modul, aber mitos.urandom()
unter der Decke. Beispiele:Etc. Mit
urandom()
direkt, Sie erfinden Ihre eigenen algorithmen für die Umwandlung der random-bytes, die es produziert, um die Ergebnisse, die Sie wollen. Tun Sie das nicht 😉SystemRandom
tut es für Sie.Hinweis: dieser Teil der docs:
es ist genau so sicher - oder unsicher - wie in Ihrem Betriebssystem die Implementierung des
os.urandom
. Was bedeutet "so sicher wie die Menschen, die schrieb Ihr Betriebssystem wussten, wie Sie es machen". Es gibt keine absoluten Garantien im Leben 😉 Aber für alle praktischen Zwecke, ja, es wäre erstaunlich, wenn es nicht kryptografisch sichere basiert auf allen aktuellen wissen.Möchten Sie vielleicht gehen über diese Antwort nach security.stackexchange.com/a/3939/24680
Obwohl
base64.b64encode(os.urandom(32))
ist ein bisschen sauberer als''.join(random.choice(b64chars) for i in range(43)
oderb64encode(bytes(random.randrange(256) for _ in range(32)))
oder irgendeine andere Variante, die Sie verwenden möchten.Wie verwenden Sie
seed()
in diesem Fall?InformationsquelleAutor Tim Peters
Python 3.6 stellt eine neue Geheimnisse Modul, die "bietet Zugriff auf die meisten sichere Quelle der Zufälligkeit, dass Ihr Betriebssystem bietet." Um die zu erzeugen kryptographisch sichere zahlen, die Sie nennen können
Geheimnisse.randbelow()
.wird wieder eine Zahl zwischen 0 und
n
.InformationsquelleAutor Cody Piersall
Wenn Sie möchten, eine
n
-bit-Zufallszahl unter Python 2.4+, die einfachste Methode, die ich gefunden habe, istBeachten Sie, dass
SystemRandom
verwendetos.urandom()
, so das Ergebnis dieser Methode ist nur so gut wie Ihr systemurandom()
Umsetzung.InformationsquelleAutor jjlin
Zum generieren einer kryptografisch sicheren Pseudo-integer, können Sie den folgenden code verwenden:
Wo
n
ist eine Ganzzahl, die größern
ist, desto größer ist die ganze Zahl erzeugt ist.Haben Sie zu importieren
os
undbinascii
ersten.Das Ergebnis dieses Codes können variieren von Plattform zu Plattform.
InformationsquelleAutor TheGamePlayer 40