Python 庫手冊:secrets 安全隨機密碼模塊

secrets 是 Python 3.6+ 引入的標準庫模塊,專爲生成密碼學安全的隨機數、令牌和密碼而設計。它在底層使用操作系統提供的高質量隨機源(如 /dev/urandom 或 Windows 的 CryptGenRandom),適用於身份驗證、密鑰生成、驗證碼、口令管理等安全敏感場景。

常見應用場景:

(1)生成隨機密碼、驗證碼、密鑰(key)。

(2)創建唯一令牌(如用戶登錄 token)。

(3)生成不可預測的 URL 安全字符串(適合郵箱驗證、重置鏈接等)。

(4)隨機選擇安全選項(如加密中使用的算法)。

◆ ◆ ◆

核心概念

1、加密安全隨機生成

相比 random 模塊,secrets 使用的是更適合安全場景的加密強度隨機源。

2、專用於敏感數據生成

不適合用於普通模擬或遊戲用途(請用 random 模塊)。

3、支持二進制和字符串格式的令牌

如 token_bytes()、token_hex()、token_urlsafe(),可適應不同需求。

4、安全選擇與密碼構造

提供 choice() 方法安全地從字符集中選取字符,適合構建密碼或口令。

◆ ◆ ◆

應用舉例

例 1:生成隨機安全整數(在給定範圍內)

例 2:生成隨機 URL 安全的令牌

例 3:從字符集中安全選擇一個字符(如密碼生成)

例 4:使用 token_bytes() 生成二進制密鑰(用於加密)

例 5:生成唯一邀請碼(避免重複)

◆ ◆ ◆

常用函數速覽

secrets.choice(sequence)

從序列中安全隨機選擇一個元素。

參數:

sequence:非空序列(如字符串、列表等)

返回:隨機選中的元素

secrets.compare_digest(a, b)

安全比較兩個字符串或字節,防止時序攻擊。

參數:

a, b:要比較的對象(str 或 bytes)

返回:bool,相同爲 True

secrets.randbelow(n)

返回小於 n 的非負隨機整數。

參數:

n:正整數上限

返回:int

secrets.randbits(k)

返回一個具有 k 位隨機二進制數的整數。

參數:

k:位數(整數)

返回:int

secrets.token_bytes(nbytes=None)

生成安全的隨機字節串。

參數:

nbytes:要生成的字節數,默認 32

返回:bytes

secrets.token_hex(nbytes=None)

生成安全的隨機十六進制字符串。

參數:

nbytes:對應生成多少字節(每字節 = 2 位十六進制字符),默認 32

返回:str(如 '9f8c7a6d...')

secrets.token_urlsafe(nbytes=None)

生成 URL 安全的 Base64 編碼字符串(適合鏈接使用)。

參數:

nbytes:原始字節數,默認 32

返回:str,適合 URL 傳輸的 token

◆ ◆ ◆

補充說明

1、secrets 是生成敏感數據(如密碼或 token)的首選模塊,請勿使用 random 生成密碼。

2、secrets.choice() 可替代 random.choice(),用於更安全的場景。

3、token_urlsafe() 生成的字符串包含 A-Z, a-z, 0-9, -, _,可以安全嵌入 URL。

“點贊有美意,讚賞是鼓勵”