🌐 ZH

🎲 文本随机数生成器

生成UUID、随机字符串、安全密钥等的工具。适用于API密钥、临时密码、令牌生成等场景,并以加密安全的方式生成随机数。

结果
※ UUID是通用唯一标识符,重复概率极低。
※ 生成的随机数以加密安全的方式生成。
※ 可用于API密钥、临时密码、令牌等场景。
指南

了解更多

01

1. 随机数生成的重要性与CSPRNG

随机数(Random Number)是不可预测的数值,对加密、安全防护、游戏和模拟仿真都不可或缺。普通的随机数生成器产生的是伪随机数(Pseudo-Random),本质上由算法计算得出,只要知道种子值就能被预测。在安全性要求高的场景中,必须使用CSPRNG(加密安全伪随机数生成器)。PHP的random_bytes()和random_int()函数就是CSPRNG,底层依赖/dev/urandom或CryptGenRandom等操作系统级熵源。JavaScript则提供crypto.getRandomValues()方法,利用浏览器自身的熵源生成随机值。而普通的Math.random()并不具备密码学安全性,绝对不能用于生成令牌、会话ID或加密密钥,否则会带来严重的安全隐患。

02

2. UUID与全局唯一标识符

UUID(通用唯一识别码)是一种128位的唯一标识符,重复概率极低,几乎可以忽略不计。UUID v4完全基于随机数生成,是目前应用最广泛的版本。其标准格式为xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,其中的数字4表示版本号,y位则表示变体(variant)信息。UUID v1基于时间戳和网卡MAC地址生成,虽然支持按时间顺序排序,但由于会暴露MAC地址,存在一定的隐私和安全隐患。较新的UUID v7版本同样基于时间戳,但经过设计不会泄露真实的个人信息或设备信息。在数据库主键、文件命名、会话ID以及分布式系统中使用UUID,可以在无需中心化协调的前提下保证全局唯一性,这对水平扩展的架构尤为重要。

03

3. 安全密钥与令牌的生成规范

API密钥、身份验证令牌、会话ID都必须具备足够的信息熵才能抵御暴力破解。业界普遍建议至少使用128位(16字节)的熵,而256位(32字节)则被认为更加安全可靠。通过Base64编码可以将二进制随机数转换成URL安全的字符串形式,便于在网络请求中传递。JWT(JSON Web Token)由Header、Payload、Signature三部分组成,令牌本身就携带了必要的信息。CSRF令牌用于防止跨站请求伪造攻击,需要在每个表单中嵌入独一无二的令牌值。OAuth 2.0协议中的state参数同样是用于防止CSRF攻击的随机值。此外,令牌应当设计为一次性使用(nonce机制)或设置合理的过期时间,从而有效防止重放攻击带来的安全风险。

04

4. 密码学随机数生成器的底层实现

操作系统会从硬件噪声、键盘鼠标输入的时间间隔、网络数据包到达时间等多种物理来源中收集熵值。Linux系统提供了/dev/random(阻塞模式)和/dev/urandom(非阻塞模式)两种设备文件供程序读取。/dev/random在系统熵值不足时会进入等待状态,这在高并发的服务器环境中可能造成性能问题。现代Linux内核更推荐使用getrandom()系统调用来获取随机数。Windows系统则使用CryptGenRandom(较旧的传统接口)或BCryptGenRandom(更现代的接口)来生成安全随机数。硬件随机数生成器(HRNG)可以利用Intel的RDRAND指令集或TPM安全芯片来产生真正意义上的物理随机数。而在云计算环境中,由于虚拟化技术会导致熵源相对匮乏,通常需要借助haveged之类的守护进程来补充系统熵池。

05

5. 区块链与智能合约中的随机数问题

区块链本质上是一个确定性运行环境,这使得生成真正的随机数变得异常困难。由于每个节点都必须能够独立验证并得出完全一致的计算结果,普通的随机数生成方式在这里根本无法适用。如果简单地使用区块哈希值作为随机数来源,矿工理论上是可以通过调整打包顺序来操纵结果的。Chainlink VRF(可验证随机函数)能够提供链上可验证的随机数,被广泛应用于链上抽奖活动和NFT的随机铸造过程中。承诺-揭示(Commit-Reveal)机制要求参与者先提交一个哈希值作为承诺,之后再公开原始数值进行验证,从而有效防止提前串通操纵结果。随机信标(Random Beacon)则是由NIST或drand等项目提供的公开、可验证的随机数服务。对于链上博彩类的智能合约游戏来说,值得信赖的随机数来源是保证公平性的核心基础。

06

6. 随机数生成工具的实战应用场景

在线随机数生成器在实际工作中有着广泛而多样的用途。发放API密钥时应确保足够的长度(建议32字符以上)和字符复杂度,以抵御穷举攻击。临时密码通常建议组合数字、字母和特殊符号,并设置为仅可使用一次。优惠券代码从用户体验角度出发,更倾向于使用大写字母加数字的友好组合(例如AB12-CD34-EF56),便于用户手动输入和辨认。邀请码则通常设计得短小精悍、易于记忆,一般为6到8个字符。为避免文件名冲突,常见做法是将时间戳与随机数组合使用。以UUID作为数据库分库分表的键值,可以有效克服自增ID在分布式场景下的诸多局限性。A/B测试中的用户分组分配同样依赖随机数机制,以此保证实验结果的统计公正性。总而言之,根据具体的安全需求选择恰当强度的随机数生成方案,始终是至关重要的一环。

常见问题

UUID真的不会重复吗?
UUID v4是128位的随机值,重复的概率几乎接近于0,在实际使用中可以视为是唯一的。
生成的值会保存到服务器吗?
不会,所有生成过程都在浏览器端(客户端)完成,不会将数值发送或保存到服务器。
可以用作API密钥或密码吗?
该工具使用的是密码学安全的随机数生成方式,但实际服务中的API密钥或密码,最安全的做法还是遵循该服务自身的发放流程。
长度最多可以设置到多少?
可以设置1到256个字符,超出该范围会显示错误提示。
除了UUID之外还能生成哪些格式?
除UUID v4外,还可以选择生成英文+数字组合、纯数字、十六进制(hex)格式的随机数。