生成随机 hex / base64 / alphanumeric Token
Token(令牌)是一串由密码学安全随机数生成的字符串,用于身份验证、API 访问授权和会话管理等场景。与密码不同,Token 通常由系统自动生成和管理,具有更高的随机性和熵值。安全的 Token 必须不可预测、不可伪造,且具有足够长度以抵抗暴力枚举。
| 格式 | 字符集 | 适用场景 |
|---|---|---|
| Hex | 0-9a-f,每字节 2 字符 |
最通用,调试友好 |
| Base64 | A-Za-z0-9+/ |
更紧凑 |
| Base64URL | A-Za-z0-9-_(无 =) |
URL 参数、JWT |
安全要求:Token 必须来自 CSPRNG(本工具使用 crypto.getRandomValues()),长度建议 ≥ 128 位(32 hex 字符)。不要用 Math.random() 或时间戳生成安全 Token。
将 Token 存入环境变量(
.env),不要硬编码在代码中提交。
.env 文件或密钥管理服务中最低建议 128 位(32 hex 字符),这提供约 2¹²⁸ 种可能,暴力破解不可行。对于长期有效的 API 密钥,建议 256 位(64 hex 字符)以留有安全余量。短期一次性 Token(如邮件验证链接)128 位即可。
三者编码相同的随机字节,安全性完全一致。区别在于表示效率:32 字节随机数用 Hex 是 64 字符,Base64 是 44 字符,Base64URL 也是 44 字符但不含 +/=,可直接用在 URL 中不需转义。
Math.random() 使用伪随机数算法(通常是 xorshift128+),其内部状态可被逆向推导。攻击者观察到几个输出后,可以预测后续所有值。crypto.getRandomValues() 使用操作系统熵源(如硬件噪声),输出不可预测。