HandyTools Hub

随机字符串生成器

使用自定义字符集生成安全随机字符串。

🔒 100% 本地处理——字符串由 crypto.getRandomValues 生成,绝不存储

字符集

生成加密安全的随机字符串,长度、数量和字符集完全可配置。自由组合小写、大写、数字、符号和十六进制,还能加入自定义字符,一键排除易混淆字符。适合需要令牌、ID、测试数据的开发者,也适合任何需要批量随机字符串的场景。

如何使用

  • 设置长度和数量: 选择每个字符串的长度和生成数量(1–100)。
  • 选择字符集: 勾选小写、大写、数字、符号或 hex,也可以输入自定义字符。
  • 排除易混淆字符: 可选移除 I、l、1、O、0,让输出更适合人工阅读。
  • 生成并复制: 点击生成,然后复制单个字符串或一键全部复制。

功能特性

  • 使用 crypto.getRandomValues 加密安全随机源,配合拒绝采样——绝不使用 Math.random
  • 五组内置字符集,外加自由输入的自定义字符
  • 排除易混淆字符开关,适合需要人工读写的字符串
  • 批量生成最多 100 个字符串,每个最长 1000 字符
  • 每个字符串可单独复制,也支持一键复制全部
  • 完全本地处理,数据不上传、不存储

为什么拒绝采样很重要

最常见的写法是 Math.floor(Math.random() * charset.length),它有两个问题:Math.random 不是加密安全的随机源;而用随机字节对字母表长度取模会让前几个字符出现的概率偏高。本工具从 Web Crypto API 取随机字节,并拒绝任何超出字母表长度整数倍范围的字节,保证每个字符的概率完全相等。生成的结果可以放心用于会话令牌、随机数(nonce)和测试数据,不必担心偏差或可预测性。

使用场景

  • API 令牌与密钥: 为开发环境生成随机密钥和 Bearer 令牌。
  • 测试数据: 批量生成唯一 ID、slug 和编码用于单元测试。
  • 优惠券与邀请码: 排除易混淆字符,方便用户手动输入。
  • 十六进制值: 生成随机 hex 字符串,用于颜色、哈希或标识符。
  • 临时密码: 组合所有字符集,生成高熵的一次性凭据。

生成更好随机字符串的建议

字符集要匹配使用对象:机器不在乎全字符集加符号,但人类在乎——凡是需要读出来或手动输入的字符串,都建议打开排除易混淆字符。熵值随长度和字母表大小同时增长,62 字符字母表下 16 位字符串已有约 95 位熵。需要 hex 时直接用 hex 开关,避免手输字符集出错。另外请记住:随机不等于唯一——如果需要在大型系统中保证无碰撞的 ID,请改用 UUID 生成器。

相关工具

常见问题

生成的字符串是真正的随机吗?

是的。生成器使用浏览器内置的加密安全随机数源 crypto.getRandomValues,并通过拒绝采样避免取模偏差,绝不使用 Math.random。输出适合用于令牌、ID 和测试数据。

排除易混淆字符选项是做什么的?

它会从字符集中移除视觉上容易混淆的字符——I、l、1、O、0。当字符串需要人工阅读或输入时(如邀请码、许可证密钥)非常有用。

hex 选项和其他字符集有什么区别?

hex 会把输出限制在 0-9 和 a-f 这 16 个字符,这是哈希、令牌和颜色值的标准字母表。其他字符集(小写、大写、数字、符号)可以自由组合,自定义字符也会合并进去。

可以使用自定义字符吗?

可以。在自定义字符输入框中输入任意字符,它们会与所选字符集合并。重复字符会自动去除,所以 hex 和数字组合不会影响分布均匀性。

在这里生成密钥安全吗?

所有计算都在你的浏览器本地完成——不经过网络、不做任何存储。随机源与密码管理器使用的是同一套 Web Crypto API。对于长期使用的生产环境密钥,建议使用专门的密钥管理服务。

长度和数量有什么限制?

每个字符串长度为 1 到 1000 个字符,每次点击可生成 1 到 100 个字符串。这些限制既保证页面响应流畅,也覆盖了几乎所有实际使用场景。