使用Python Secrets模块生成安全随机数 | AI生成和翻译

Home 2025.08

secrets 模块简介

secrets 模块(Python 3.6 引入)是标准库的一部分,提供对密码学强度随机数生成的访问。与适用于模拟或游戏的 random 模块不同,secrets 专为安全相关任务设计,例如生成密码、令牌或密钥,因为它使用操作系统的密码学安全随机数生成器(例如类 Unix 系统中的 /dev/urandom)。

使用方式很简单,直接导入即可:

import secrets

核心功能与用法

以下是 secrets 模块的主要函数,附带简要说明和示例。这些函数生成的随机值具有高度不可预测性。

函数 用途 使用示例
secrets.token_bytes(n) 生成 n 个随机字节。适用于创建二进制密钥。 key = secrets.token_bytes(16) # 16个随机字节
secrets.token_hex(n) 生成 n 个随机字节并返回十六进制字符串(由于十六进制编码,字符串长度为 n 的两倍)。适用于十六进制令牌。 hex_key = secrets.token_hex(16) # 32字符十六进制字符串
secrets.token_urlsafe(n) 生成 n 个随机字节,进行 base64 编码后适用于 URL 安全场景(例如网络令牌)。 url_token = secrets.token_urlsafe(32) # 约43字符字符串
secrets.randbelow(n) 返回 0 到 n-1 之间的随机整数(包含边界)。是 random.randint 的安全替代方案。 num = secrets.randbelow(100) # 0到99的随机整数
secrets.choice(seq) 从非空序列 seq 中返回随机元素。是 random.choice 的安全替代方案。 item = secrets.choice(['a', 'b', 'c']) # 从列表中随机选择

实际应用示例

  1. 生成安全密码
    结合 secrets.choice 与字符串常量生成随机密码。
    import string
    import secrets
    
    alphabet = string.ascii_letters + string.digits + string.punctuation
    password = ''.join(secrets.choice(alphabet) for _ in range(12))
    print(password)  # 例如:"X8f#9L&pW2c%"
    
  2. 创建 API 令牌
    使用 token_urlsafe 生成适用于网络的随机字符串。
    token = secrets.token_urlsafe(32)
    print(token)  # 例如:"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
    
  3. 游戏或模拟中的随机选择(具备安全性)
    winners = secrets.choice(['Alice', 'Bob', 'Charlie'])
    print(f"获胜者: {winners}")
    

最佳实践与注意事项


Back

x-ai/grok-code-fast-1

Donate