随机字符串生成器 · 在线生成指定长度与字符集的随机字符串

加载中…

操作挑好模板与长度,勾上要的字符类型,点「生成」;下面有「复制全部」与「下载 .txt」

猜你喜欢

在线随机字符串生成器:长度 1~4096 位任选,小写、大写、数字、符号四类自由勾选,可另填自定义字符、排除 0 O 1 l I 易混字符。一次最多 100 条,每条可套前后缀,按换行或逗号拼好,复制或存成 .txt。另有十六进制、Base64 风格、URL 安全、只字母、只数字等格式模板,实时给出字符集大小与每条约多少比特熵。全部在本机用 crypto.getRandomValues 生成,不上传。

怎么用

页面顶部常驻一句说明:随机字符串在你这台设备的浏览器里现算现出,不上传、不保存到任何服务器,也不写进浏览器的本地存储。本机只记你选的模板、长度、字符集这几项设置。

如果顶部出现一条红色提示,说明这个浏览器环境没有提供 crypto.getRandomValues(安全随机源)。这一页不会退回普通伪随机数,而是直接不生成——给程序用的随机串一旦可预测,等于给人留了后门。换个较新的浏览器,或者在正常的网页环境(不是受限的内嵌浏览器)里再打开一次。

进页面就会先出一批,省你一次点击。

一、先挑格式模板

顶部的「格式模板」下拉决定字符集与长度怎么来,一共八档:

  • 自定义(按下面的勾选):默认档。字符集由下面四类勾选与「自定义字符」一栏决定,长度也由你填。想怎么配都行。
  • 纯十六进制:只用 0-9 与 a-f。一个字符带 4 个二进制位,长度是偶数时正好对应整数个字节(32 个字符 = 16 字节)。
  • Base64 风格:大小写字母、数字再加 + 与 /,共 64 个字符。注意它只是长得像 Base64,不是对谁编码出来的结果,所以解码不出原文,也没有末尾的 = 填充。
  • URL 安全:把 + / 换成 - _,共 64 个字符。放进网址、文件名、命令行参数里都不必转义,是贴进链接时最省事的一档。
  • 只字母:只有大小写字母,共 52 个。有些系统要求标识符不能以数字开头、或者干脆不收数字,用这一档最省心。
  • 只数字:只有 0-9。每一位只带约 3.32 位熵,适合当短验证码、房间号、测试用的流水号,不适合当密钥。
  • 类似 API Key(sk- + 48 位):固定 48 位大小写字母与数字,前面加 sk- 前缀,长度由模板钉死。写文档、画接口示例、造联调用的假密钥时直接拿来用。
  • 类似激活码(XXXX-XXXX-XXXX-XXXX):四段各 4 位大写字母与数字,段间用短横连接,恒定去掉 0 O 1 l I 这五个易混字符,方便念给人听、方便手抄。

选了固定长度的模板(后两档)时,长度滑块与快捷按钮会淡下去并停用;选了自定义以外的模板时,下面那排字符集勾选会整块收起来——字符集已经由模板定死了。

二、长度与条数

长度范围 1~4096 位。滑块走到 512,再长的直接在右边的数字框里填,敲回车就重新生成。旁边一排 8/16/32/64/128 是常用档的快捷按钮,点一下就换长度并立刻出一批——其中 32 是被要到最多的一档。

「生成几条」填 1 到 100。批量造测试数据、给一批设备发临时口令时拉大它,每一条都是独立取样,彼此之间没有任何关系。

三、字符集(自定义模板下)

四个勾选框分别是小写 a~z、大写 A~Z、数字 0~9、符号。符号那一类的具体内容在右边的「符号集」框里,默认是 !@#$%^&*()-_=+[]{};:,.<>?,可以随手改;这个框只收可打印的 ASCII 标点,填进去的字母、数字、空格与中文会被自动去掉,重复的也只留一个。

「自定义字符」一栏收任意字符——汉字、希腊字母、平假名都行,只有空格、换行这类空白与控制字符会被丢掉,重复的自动去重。要一串只由「甲乙丙丁」组成的随机串,把它们填进这里、四类勾选全关,就是这个效果。

排除易混字符开关剃掉的是这五个:0(零)、O(大写欧)、1(一)、l(小写 L)、I(大写 i)。要把串打印出来、念给人听、或者手抄到另一台设备上时,打开它能省下一半的对错功夫。四类勾选与自定义栏全空时页面不生成,会在下面提示先勾一类。

四、前后缀与分隔符

前缀与后缀各自最长 32 个字符,套在每一条外面。比如前缀填 sess_,一百条出来就都是 sess_ 开头。注意前后缀是固定的,不带来任何随机性,下面的熵读数只算随机那一段。

分隔符决定这一批怎么拼成一整段:换行(一行一条,最常用,粘进表格正好是一列)、逗号(直接拼成代码里的一行)、空格。

五、复制与下载

生成与再来一批都是重新出一批;复制全部把拼好的整段写进剪贴板,浏览器不让网页直接写剪贴板时会把内容放进下面一个框并选中,按 Ctrl+C(Mac 上是 ⌘+C)即可;下载 .txt 把这一批存成一个文本文件,文件也是在本机现造的,不经过网络。

结果框最多铺前 20000 个字符,超出的部分只在页面上省略,复制与下载拿到的始终是全部。

怎么看结果

四个读数各是什么

结果框上面一排读数:

  • 字符集:这一轮实际可用的字符有多少个。勾了小写、大写、数字就是 62;打开「排除易混」后是 57;纯十六进制是 16;只数字是 10。
  • 随机位数:这一条里有多少个随机字符。模板钉死长度时(sk- 那档是 48,激活码那档是 16),听模板的,不是你填的那个数。
  • 每条约 N 比特:这一条的熵,算法是 随机位数 × log2(字符集大小)。它衡量的是「这一条有多少种可能」,是判断够不够用的唯一硬指标。
  • 取值空间:把上面那个比特数翻成「约多少种」的人话,方便直观感受量级。

下面还有一句分档说明。

熵的四档

页面把熵分成四档,区间写死,只描述量级、不做任何安全承诺:

熵 这一档适合什么
32 比特以下 取值空间很小,只适合验证码、房间号这类短命的东西
32~63 比特 临时编号、短链接后缀够用;条数一多就该想想会不会撞上,别当密钥
64~127 比特 会话标识、文件名、批量测试数据绰绰有余;长期密钥建议再加长
128 比特以上 各种密钥、令牌常用的量级,一般够当密钥用

几个常用组合的熵

  • 32 个十六进制字符:32 × 4 = 128 比特,正好是 16 字节,最常见的一档。
  • 32 个大小写字母加数字:32 × 5.954 ≈ 190.5 比特,比上面还富余。
  • 22 个 URL 安全字符:22 × 6 = 132 比特,是「128 位而且能塞进网址」的最短写法。
  • 类似激活码那一档:16 × 5 = 80 比特(去易混后正好 32 个字符,log2 是整数 5)。当激活码、邀请码合适,当密钥偏短。
  • 6 位纯数字验证码:6 × 3.32 ≈ 19.9 比特,也就是一百万种——所以短信验证码必须配上「几分钟内失效」「错几次就锁」,光靠位数挡不住穷举。

会不会撞上同一条

同一批里两条撞上的概率,按生日问题估:生成 N 条、取值空间 2 的 B 次方时,出现一次重复的概率大约是 N 的平方除以 2 的 (B+1) 次方。落到实处就一句话:想让重复概率低到可以忽略,熵至少要是「预计生成条数的二进制位数」的两倍还多。要生成十亿条(约 30 位)互不重复的编号,熵给到 96 比特以上就相当稳;如果只有 32 比特,生成七万条左右就有一半概率撞上一次了。

页面上的「不重复」不做承诺:每条都是独立取样,不会去查前面生成过什么。真要保证唯一,靠的应该是数据库的唯一索引,而不是随机。

该用哪一页

  • 要一串给人记、给人输的密码,去 随机密码生成器:那边有易记口令模式与强度分档。
  • 要一条别的系统也认得的标准编号(数据库主键、请求编号),去 UUID 生成器。
  • 只要一个数字、掷骰子、抽区间里的随机数,去 随机数生成器。
  • 要在一份名单里抽人,去 在线抽签器。

常见问题

生成出来的串安全吗?

先分清两件事:随机源与长度。随机源这边,页面只认 crypto.getRandomValues——浏览器向操作系统要的加密级随机数,和命令行工具用的是同一类来源;拿不到它页面就不生成,不会偷偷退回 Math.random。长度这边得你自己看读数:一条 8 位的纯数字串,随机源再好也只有一亿种。所以「安全」的判断方法是:确认顶部没有红色提示,再看熵读数够不够你那个用途的量级。

至于传输,页面从头到尾没有一次网络调用,串不会离开这台设备——但你把它复制走以后去了哪里,就不归页面管了:别把真密钥贴进聊天记录、公开的仓库或者截图里。

为什么每次结果都不一样,能不能「按种子」生成?

不能,这是有意的。可按种子复现的随机数(同一个种子必出同一串)在做实验、对拍、跑测试时很有用,但它和「安全随机」是互相排斥的两件事:能复现就意味着知道种子的人能算出你的串。这一页的定位是给程序用的随机标识与临时密钥,所以固定走不可复现的加密级随机源。需要可复现的随机序列,应该在代码里用带种子的伪随机数生成器,而不是在网页上生成一次再抄下来。

结果里出现了奇怪的符号,对面系统不收怎么办?

先看串会经过哪几道手。放进网址或文件名,用「URL 安全」模板最保险;写进 JSON 或 YAML 配置,把符号那一类关掉,或者在符号集里删掉引号、反斜杠与 {};粘进命令行,注意美元号、反引号、叹号在各种 shell 里有特殊含义,最省事的是整串套上单引号,或者干脆用「只字母」「纯十六进制」这两档;存进数据库,先确认列的字符集与长度够。分不清的时候,纯十六进制是最不容易出事的一档——任何系统都收得下 0-9a-f。

长度能不能超过 4096?

页面上限就是 4096 位,这是为了让浏览器不被单条超长串拖住。真要更长的(比如造一个几十万字符的测试载荷),更合适的做法是把上面 FAQ 里的命令行写法写进脚本跑,或者在这里生成 100 条 4096 位再自己拼起来——毕竟从随机性上说,两段独立随机的串接在一起,熵就是两段之和。

手机上能用吗?

能。整页在 400 像素宽下完整可见,勾选框与输入框会自动折行,结果框是等宽字体并允许长按全选。手机上最实用的搭配是:模板选「类似激活码」或打开「排除易混」——在手机屏幕上分辨 0 和 O、1 和 l 比在电脑上更费劲。

这一页有没有记录我生成过什么?

没有。本机只写一个键 hi8-suijizifuchuan-prefs,里面只有模板、长度、四个勾选、符号集、自定义字符、条数、前后缀与分隔符这些设置,一个生成结果也不存。离开页面时页面内存里的那一批也会清掉。

原理与冷知识

为什么不能直接「随机数取模」

从一个 32 位随机数取字符,最容易想到的写法是 随机数 % 字符集大小。这个写法有个不明显的毛病:2 的 32 次方一般不能被字符集大小整除,余数小的那几个值会比别的多占一份。以 62 个字符为例,2 的 32 次方除以 62 余 4,于是前 4 个字符各多出一次被选中的机会——单看一条察觉不到,生成几百万条做频次统计就会看出前几个字符偏多。

这一页用的是拒绝取样:先算出「能被 62 整除的最大那一段」,取样落在这一段里才算数,落在末尾那截零头上就丢掉重取。每个字符占到的份数因此完全相同。代价是偶尔要多取一次样,收益是分布严格均匀。页面里还给重取次数设了上限,万一遇上一个只会吐固定值的坏随机源,循环也会停下来,不会把标签页卡死。

crypto.getRandomValues 从哪里拿随机数

它不是浏览器自己算的,而是向操作系统要的:Linux 上是 getrandom 系统调用背后的内核熵池,Windows 上是 BCryptGenRandom,macOS 上是 SecRandomCopyBytes。内核那一池「熵」来自各种物理上不可预测的事件——中断到达的精确时刻、磁盘寻道耗时、键盘鼠标的微小时间差,新一点的 CPU 还直接提供硬件随机数指令。这些原始噪声会先经过一层加密算法搅拌,再吐出来,所以拿到的是「就算你看到前面一百万个字节,也推不出下一个字节」的序列。

相比之下,Math.random() 是一个纯数学的伪随机数生成器:种子一旦泄露,之后的每一个数都能精确算出来。做动画抖动、打乱一副牌够用,做密钥就是灾难——历史上不止一次有系统因为用错随机源,让别人算出了本该不可预测的会话令牌。

「熵」这个词是怎么跑到密码学里来的

熵最早是热力学里的量,用来描述一个系统有多「乱」。1948 年香农在《通信的数学理论》里借走了这个词,用来度量一条消息里的不确定性有多少,单位就是比特:一个均匀的二选一是 1 比特,一个均匀的八选一是 3 比特。密码学接着借用了同一套算法——说一串密钥「有 128 比特熵」,意思是猜中它平均要试 2 的 127 次方次。

也正因为它衡量的是不确定性而不是长得像不像随机,一串 aaaaaaaa... 只要真是随机掷出来的,熵和别的串一模一样。看着不随机就重新生成一次,反而是在偷偷减少取值空间。

那五个易混字符的来历

0 与 O、1 与 l 与 I 之所以出名,是因为早期的点阵字体与打印机分辨率太低,这几个字形几乎重合。后来的一些编码方案干脆把它们整组去掉,比特币地址用的 Base58 就是最有名的例子——它比 Base64 少的六个字符里,就有这四个加上 + 与 /。本页「排除易混」剃掉的是 0 O 1 l I 这五个,「类似激活码」模板则是恒定去掉它们:一串要靠电话念给客服、或者从屏幕抄到另一台机器上的码,少这五个字符,出错率能降一大截。

顺带一提,sk- 这种前缀写法在近几年的接口密钥里很常见,好处是密钥一眼就能认出是哪一类、扫描工具也好写规则——很多代码托管平台就是靠这种固定前缀,在你不小心把密钥推上去时立刻告警。

本页更新于 2026-09-25 · 分类:在线工具、休闲小游戏