随机数:它们如何工作以及它们的用途
发布于 3 de marzo de 2026 | 最近更新
了解随机数生成器的工作原理、TRNG 和 PRNG 之间的区别、它们在密码学、模拟和游戏中的应用。
随机数无处不在:从抽奖和机会游戏到通过科学模拟和机器学习保护银行交易的密码学。但它们真的是“随机”的吗?确定性机器如何产生不可预测的东西?在本文中,我们探讨随机性背后的科学和实践,以及如何使用我们的 随机数生成器 为了您自己的项目。
真随机性与伪随机性
第一个基本区别是真随机性和伪随机性之间的区别。真正随机的过程是其结果从根本上不可预测的过程,例如原子的放射性衰变或电子电路中的热噪声。这些量子现象是我们所知的最纯粹的随机性来源。
另一方面,计算机是确定性机器:给定相同的初始状态,它们总是产生相同的结果。因此,它们生成的东西被称为“伪随机数”(PRNG,Pseudo-Random Number Generator)。这些算法产生的序列看起来是随机的并通过了许多统计测试,但实际上如果您知道生成器的内部状态(“种子”),它们是完全可预测的。
| 特点 | TRNG(真) | PRNG(伪) |
|---|---|---|
| 来源 | 物理现象 | 数学算法 |
| 可预测 | 没有 | 是的(带种子) |
| 速度 | 慢 | 非常快 |
| 可重现 | 没有 | 是(相同的种子=相同的序列) |
| 主要用途 | 密码学,安全 | 模拟、游戏、统计 |
随机数的实际应用
随机性在极其广泛的领域有着广泛的应用。在这里我们探讨最相关的:
- 密码学和安全: 强密码、加密密钥和会话令牌依赖于随机性而变得不可预测。这就是为什么我们的 密码生成器 使用稳健的生成技术。您可以通过阅读 来更深入地研究这一点如何创建强密码.
- 蒙特卡洛模拟: 科学和金融使用数百万个随机数来模拟可能的场景并计算概率。从预测流行病的演变到评估金融衍生品。
- 机器学习: 初始化神经网络中的权重、采样训练数据以及 dropout 等技术都需要可靠的随机生成器。
- 游戏和娱乐: 视频游戏中世界的程序生成、纸牌的分配和抽奖都取决于随机性。我们的 随机轮盘 它非常适合抽奖和快速决策。
- 统计和抽样: 为了使调查或科学研究具有代表性,必须随机选择样本。
最重要的算法
纵观计算历史,已经开发了多种算法来生成伪随机数。每个都有其优点和缺点:
梅森扭转者 (MT19937) 可能是世界上使用最多的。它由 Makoto Matsumoto 和 Takuji Nishimura 于 1997 年创建,是 Python、Ruby、PHP 和许多其他语言的默认生成器。它的周期非常长,为 2^19937-1,这意味着该序列不会重复天文数字。然而,它在加密上并不安全。
对于安全应用,使用加密安全生成器 (CSPRNG),例如 Fortuna 或基于 AES-CTR 的生成器。这些速度较慢,但确保即使通过查看序列的一部分,在计算上也无法预测下一个数字。如果您对数字安全感兴趣,请务必阅读我们的 2026 年数字安全指南.
数学好奇心
Mersenne Twister 的周期为 2^19937-1。客观地说,可观测宇宙中的原子数量估计“仅”10^80,这要少得多。使用此算法可以生成比宇宙中原子数量还要多的不同随机数。
如何正确使用随机数
使用随机数生成器似乎很简单,但有些常见错误可能会毁掉您的结果。最常见的是使用可预测的种子,例如具有第二分辨率的系统时间。如果两个进程在同一秒启动,它们将生成完全相同的数字序列。
另一个常见错误是使用标准 PRNG 进行加密。如果您要生成会话令牌、临时密码或加密密钥,则必须使用特定于您的编程语言的 CSPRNG(例如,Python 中的 Secrets 或 JavaScript 中的 crypto.getRandomValues )。
对于绘画、小组作业、游戏或随机选择等日常用途,我们的 随机数生成器 这是完美的工具。设置最小和最大范围以及您需要的数字数量并立即获得结果。如果您喜欢更直观的赠品,也可以尝试 随机轮盘.
未来:量子随机性
随着量子计算机的出现,真正随机数的生成正在变得民主化。澳大利亚国立大学的量子发生器等服务允许通过互联网访问真正的随机性。随着这项技术变得更便宜,我们可以看到传统的 PRNG 在关键应用中被量子源取代。
同时,对于绝大多数实际应用来说,高质量的 PRNG 仍然绰绰有余。关键是为每个用例选择正确的生成器并正确配置它。