首页 / 开发工具指南 / 随机数指南

随机数完整指南

从原理到实践:一文掌握伪随机(PRNG)与加密随机(CSPRNG)的本质区别、主流算法对比、统计分布检验方法、以及抽奖/抽样场景中的公平性验证最佳实践。

📖 阅读时长约 8 分钟 📅 更新于 2026-06-17 ✍️ 土豆丝工具团队
🎲 立即试用随机数生成器
支持整数/小数、自定义范围、批量生成、去重排序、随机选择器。基于 CSPRNG 加密安全随机源。所有操作在本地浏览器完成。
打开工具
#01

随机性的本质:真随机 vs 伪随机 vs 加密随机

在计算机科学中,"随机"并非一个单一概念,而是根据来源和可预测性分为三个层级:

真随机数(TRNG — True Random Number Generator)

来自物理世界的不可预测过程,如放射性衰变、热噪声(约翰逊噪声)、量子效应等。其特点是:完全不可预测无法复现、获取成本高且速度慢。适用于密码学密钥生成等最高安全需求场景。

伪随机数(PRNG — Pseudo-Random Number Generator)

由确定性算法(如线性同余法 LCG、梅森旋转 Mersenne Twister)从一个初始种子值开始迭代生成。特点是:速度快、可复现(相同种子产生相同序列)、但输出理论上可预测——只要知道算法和种子即可推算出整个序列。Math.random() 即属于此类。

加密安全伪随机数(CSPRNG — Cryptographically Secure PRNG)

同样是算法生成,但满足两个关键条件:(1) 输出的下一个值在计算上不可预测(即使知道算法和之前的所有输出);(2) 具备"前向安全性"——即使状态泄露也无法反推出之前生成的值。浏览器提供的 crypto.getRandomValues() 就是 CSPRNG。本工具即采用此方案。立即体验 →

#02

主流 PRNG 算法对比:从 LCG 到 xorshift128+

算法周期速度安全性典型用途
LCG(线性同余)~2³¹极快❌ 不安全老式游戏、简单模拟
Mersenne Twister2^19937-1❌ 不安全Python random、科学计算
xorshift128+2^128-1极快⚠️ 中等V8 引擎 Math.random() 内部实现
crypto.getRandomValues()OS 熵池较快✅ 密码学安全本工具使用、安全令牌生成
#03

统计分布检验:如何判断随机数「够不够随机」?

对于非安全场景(如游戏、蒙特卡洛模拟),我们关心的是随机数的统计分布质量。常用的检验方法包括:

  • 频率检验(Chi-Square Test):检查每个数值出现的频率是否接近均匀分布。如果生成 10000 个 [1,10] 范围的随机数,每个数字应大约出现 1000 次。
  • 游程检验(Runs Test):检测连续上升或下降序列的长度是否符合随机预期,用于发现趋势性偏差。
  • 自相关检验:检查序列中是否存在周期性模式或相邻元素之间的相关性。

专业工具如 DIEHARDNIST Test Suite 提供了数十种统计检验套件,可用于评估任何 PRNG 的输出质量。用我们的工具生成测试数据 →

#04

公平性验证:抽奖与抽签场景的最佳实践

在抽奖、摇号等涉及利益分配的场景中,"随机"不仅意味着数学上的均匀分布,更意味着过程的透明性和公信力

  • 使用 CSPRNG 而非 Math.random():确保结果不可被预测或操纵
  • 公开算法和参数:让参与者可以独立验证结果的合理性
  • 多人见证流程:邀请第三方监督生成过程
  • 保存完整的审计记录:包括时间戳、参数配置、原始输出结果
  • 支持事后重现:如果可能,保存种子信息以便后续复现验证

本工具的"历史记录"功能可以帮助您保存每次生成的完整结果,配合截图作为凭证使用。立即使用 →

#05

浏览器中的随机数 API 深度解析

现代浏览器提供两种随机数 API,它们的适用场景截然不同:

Math.random()

返回一个 [0, 1) 区间的浮点数。内部实现因引擎而异(V8 使用 xorshift128+,SpiderMonkey 曾使用 Mersenne Twister)。不应用于任何安全相关的场景——它的输出可以被有经验的攻击者预测。

crypto.getRandomValues(array)

直接填充一个 TypedArray(如 Uint32Array)为操作系统提供的加密安全随机字节。这是 Web Crypto API 的一部分,是浏览器中唯一推荐的密码学安全随机源。本工具的核心随机逻辑即基于此 API 实现。

#06

常见误区与避坑指南

  • 误区一:"Math.random() 够用了" → 对于非安全场景确实够用,但绝不能用于密码、Token、CSRF Token 等敏感数据
  • 误区二:"随机数应该看起来乱" → 真正好的随机数序列中会出现看似"规律"的子串(如连续多个相同数字),这恰恰是均匀分布的表现
  • 误区三:"种子越复杂越随机" → 对于 CSPRNG 来说,种子只影响起始点而不影响整体统计质量;对于 PRNG 来说,差的算法无论什么种子都一样差
  • 误区四:"取模运算不会引入偏差" → 当范围不是 2 的幂次时,简单的取模(% n)会引入模偏差(modulo bias),应使用拒绝采样法来消除
#07

总结:如何为你的场景选择合适的随机数生成器

在使用在线随机数生成器时,安全性取决于数据处理方式。如果生成过程涉及网络传输或服务器存储,就可能存在以下风险:

  • 服务器端日志可能记录您生成的所有随机数
  • 中间人攻击可能截获传输中的数据
  • 第三方脚本可能读取页面内容

本工具采用"纯前端运行"架构,所有随机数的生成都直接在您的浏览器本地完成,基于 crypto.getRandomValues() API 实现。工具不会向任何服务器发送数据,也不会在任何地方保存结果。页面关闭后所有数据即刻消失。

具体安全保障:

  • CSPRNG 级别的真随机性,非 JavaScript 伪随机函数
  • 零网络请求,零数据传输
  • 无持久化存储,无 Cookie 记录
  • 无需注册、登录或上传文件

对于正式的抽奖活动,建议在离线环境下使用本工具,并配合截图和多人见证流程以确保公信力。