先前有個概念討論了 random 模組,它會產生偽隨機數字和偽隨機的陣列排序。
secrets模組在部分功能上與random重疊,但兩個模組的設計理念大不相同。
random針對建模與模擬的高效能進行最佳化,其偽隨機數字產生器「夠用就好」。secrets則以密碼學安全性為設計目標,適用於密碼雜湊、安全權杖產生,以及帳號驗證等用途。至於為什麼需要新增secrets模組,PEP 506 中有更詳細的說明。
secrets模組相對小巧且直觀,提供了產生隨機整數、位元、位元組、權杖,或從指定序列中隨機取出一筆項目的方法。
要使用secrets,你必須先import它:
>>> import secrets
# Returns n, where 0 <= n < 1000.
>>> secrets.randbelow(1000)
577
# 32-bit integers.
>>> secrets.randbits(32)
3028709440
>>> bin(secrets.randbits(32))
'0b11111000101100101111110011110100'
# Pick at random from a sequence.
>>> secrets.choice(['my', 'secret', 'thing'])
'thing'
# Generate a token made up of random hexadecimal digits.
>>> secrets.token_hex()
'f683d093ea9aa1f2607497c837cf11d7afaefa903c5805f94b64f068e2b9e621'
# Generate a URL-safe token of random alphanumeric characters.
>>> secrets.token_urlsafe(16)
'gkSUKRdiPDHqmImPi2HMnw'
如果你正在撰寫安全性敏感的應用程式,你肯定會想讀讀完整文件,裡面有更多建議和範例。