random与secrets:随机数与安全生成

📅 2026/6/28 23:13:56
random与secrets:随机数与安全生成
随机数在编程中扮演着极其重要的角色,从简单的游戏逻辑、数据采样、模拟仿真,到密码学密钥生成、令牌创建、安全认证,处处都有它的身影。然而,并不是所有随机数都是“平等”的——有些随机数可以被预测,有些则几乎是不可预测的。Python 标准库提供了两个核心模块:random和secrets,它们分别服务于不同的随机数需求。很多开发者习惯性地使用random模块处理所有随机数需求,却忽视了它在安全性上的致命缺陷。而secrets模块自 Python 3.6 引入后,为安全敏感场景提供了专用工具。本文将从底层原理、API 设计、适用场景、安全性对比等维度,系统性地剖析这两个模块,并通过大量实例帮助你做出正确的选择。全文超过 5000 字,是一份兼顾理论与实践的完整指南。一、随机数的本质:真随机与伪随机要理解random和secrets的区别,首先需要了解计算机中的随机数是如何生成的。真随机数(True Random Numbers):来源于物理现象,如硬件噪声、热噪声、放射性衰变等。这些现象本质上是不可预测的,因此生成的随机数具有真正的随机性。操作系统通常通过/dev/random或/dev/urandom等接口提供对真随机数源的访问。伪随机数(Pseudo-Random Numbers):由确定性算法生成,该算法基于一个初始值(种子)产生