Rozdział 4 · Python lubi liczby
Liczby losowe: random i secrets
Dwa moduły do losowości — i zasada, którą warto zapamiętać od pierwszego dnia: nie każda losowość jest równie bezpieczna.
Moduł random z biblioteki standardowej generuje
pseudo-losowe liczby — wyglądają na losowe i są wystarczająco dobre do gier,
symulacji i przykładów edukacyjnych.
random_demo.py
import random
print(random.randint(1, 6)) # losowa liczba całkowita od 1 do 6 włącznie
print(random.random()) # liczba losowa między 0,0 a 1,0
print(random.choice([„Eagle”, reszki])) # losowy wybór z listy
Powtarzalność poprzez seed
Czasem chcesz, aby powtarzała się „losowa” seed():
seed_demo.py
import random
random.seed(42)
print(random.randint(1, 100)) # to zawsze ta sama liczba dla tej samej seed
BEZPIECZEŃSTWO: random – nie dotyczy haseł i tokenów
Nie generuj haseł i tokenów za pomocą modułu random
random zoptymalizowany pod kątem szybkości i jakości statystycznej, a nie nieprzewidywalności wobec atakującego — jego wynik zasadniczo można przewidzieć, znając wewnętrzny stan generatora. Do wszystkiego, co „wrażliwe na bezpieczeństwo” (hasła, tokeny sesji, klucze) używaj modułu secrets.secrets_demo.py
import secrets
token = secrets.token_hex(16)
print(token) # kryptograficznie bezpieczny token losowy
Praktyka: random vs secrets
Interaktywny laptop bezpośrednio w przeglądarce – wybierz odpowiednie narzędzie do zadania