RandGen|一个快速获取随机字符串的好工具

1.写在前面

首先,你有没有过这样一种情况?

一天,你打开了Minecraft,或者别的什么大世界游戏,生成一个存档时需要一个种子。

又或者,你要给你的账号改一个安全性非常高的密码、给你的服务配置一个高强度的token。

再比如,密码生成器的128位密码已经不能再满足你了,你需要一个内含一堆字符的文件当作密钥文件。

网上的随机字符串生成器倒也不是不行,但是可选的选项太少了,而且说不定我还需要特定格式的字符串呢!

问AI要吗?倒也不是不行,但是如果我需要成千上万个呢?总不能我这一天都在等AI输出吧。。。

天哪,就没有什么好的办法给我一些特定格式的随机字符串吗?

有的兄弟,有的!那么今天给大家带来我用面向自然语言编程GPT-4o和Gemini-2.0-pro写的一个python小程序,足以解决你的“随机”问题!(可能吧)

(什么?你问我为什么不是我自己写的?不好意思,我不会编程:) )

2.基本使用方法

打开软件,你可以得到如下输出:

什么鬼啊。。。密密麻麻的参数,肯定很难用!

不!接下来,我先讲解一下基本的使用方式。

程序一共有六种模式:

UUID模式(u)

纯数字(n)

纯字母(a)

数字字母混合(an)

表达式模式(re)

自定义可选字符(cc)

表达式模式算是一种高级操作。但是不要急,这一节我们先来看看基本的模式。

首先,我们要获取一个UUID。

PS D:\SOFTAA> randgen -m u
63b0696a-996f-4b53-a373-2697524085e2

可以看到,程序马上给了一个uuid。

如果我要多几个呢?可以用-c参数指定数量。

PS D:\SOFTAA> randgen -m u -c 5
191dd48e-3aa3-4b6a-94cd-98b08847bb3c
2667cb90-f503-440a-9b72-a5af6373e895
114f8018-4fce-43fe-aa9c-2537ba47c8c9
92598b3a-bb18-4583-8182-c1920e7c7dd1
d32abf65-6f1a-4419-b10d-8862a3467730

好吧,你可能觉得这也没什么,因为有个软件叫uuidgen。

那么我们切换模式看一下。

PS D:\SOFTAA> randgen -m n -c 5
32749488
33893421
66026487
96091044
95926540
PS D:\SOFTAA> randgen -m a -c 5
YeutzzhO
DpBaQvmZ
hDequUjw
IxWQoGlW
CONpuHXq
PS D:\SOFTAA> randgen -m an -c 5
2VWnidec
uRpspkVa
hFBmeIeG
jCf1YoUZ
lge4dXqX

看上去还不错,等会?为什么只有8位?不能更多或者更少吗?当然可以!这时候,用-l来控制字符串的长度。

PS D:\SOFTAA> randgen -m an -c 5 -l 3
iiU
Qky
y4C
WR4
U4l
PS D:\SOFTAA> randgen -m an -c 5 -l 15
dd9WftT9zrFvUNC
trgXC4FI3qK4WQ8
BC4GEKuWgD5xvDW
GAUdsBXpaMNxEYV
SpiSSh3Z1WQKahj

这还差不多,但是,如果我想要字符串的字母只能是小写或者大写呢?可以用-s或者-S来控制。

PS D:\SOFTAA> randgen -m an -c 5 -l 15 -s
gv8k3cihxq9yc9o
93xo6pq6irfd42t
9u06sofymp3vb1v
pkoon37vuq0n6fk
hbl7c62xgysndmt
PS D:\SOFTAA> randgen -m an -c 5 -l 15 -S
JXSMVHYWPB3X3J7
P0J2P53OE7LZHLF
51I9UNJFPGGDS7Z
CBAI62TI1DY16R6
ZWIBJSZ9J0LTZEU

如果不加,那么默认大小写混合。-s和-S就是大小写开关。

还有一种情况,就是我们想更随机,连长度都不想指定了,可以吗?

可以!加上-r参数,程序就可以给你随机长度的字符串。

PS D:\SOFTAA> randgen -m an -c 5 -r
Q9a4Xo6H13wbFmW
GpynX5xunegr5WPsI
6DtCojZRaXaNDoyW2vz0py0bG4X9IvXs
gkTzkfgpwn3jqXS
LCSpt9BSJDR2D43U9wWEiq

-r的取值范围受同一目录下的randgen.ini配置文件限制,你可以在那里更改-r的取值范围。

看,min_length是最小值,max_length是最大值。

对了,-r和-l是不能同时使用的,否则程序会报错:)

3.高级参数

如果我们想要一个特殊一点的字符串,每个字符不能重复出现,怎么办呢?

可以加上-nr,这样输出的字符串的每个字符都不会重复。

PS D:\SOFTAA> randgen -m an -c 5 -l 15 -nr
u4NPyoQkTOB6qLM
TyxhHvroY7d2uPR
mwz05RCVYQ2hZXc
gtyxGmCsSXUlzq2
xhtnD49kjCfwNrv
PS D:\SOFTAA> randgen -m n -c 5 -l 5 -nr
98267
60742
95831
12340
20435

可以看到,这些字符串的每个字符都没有重复出现。

当然,使用-nr后,-l的长度就不能超过模式的最大可组合长度。

有些难理解?我来演示一下。

PS D:\SOFTAA> randgen -m n -c 5 -l 15 -nr
Traceback (most recent call last):
  File "rget.py", line 534, in <module>
  File "rget.py", line 491, in main
ValueError: 对于模式 'n',使用 '-nr' 时的最大长度为 10。
[PYI-10076:ERROR] Failed to execute script 'rget' due to unhandled exception!

因为数字只有0-9一共10个数字,但是我们却要求程序给出一个长度为15而且不能有重复数字的字符串,这是不可能的。

如果用的是-r,那么-r会把最大值自动调整为模式的不重复最大值。

PS D:\SOFTAA> randgen -m n -c 10 -r -nr
6
521640389
4951
3289154607
97182
8504
9132486057
672
2670931485
813542607

嗯,很好。那么这个程序可以把输出导出到文件里吗?可以!加入-o选项。

PS D:\SOFTAA> randgen -m n -c 10 -l 10 -o D:\test.a
8580563288
8376224638
0511394589
1055192194
5542491927
4052992203
6000303434
1893942770
7388101068
1413706195
字符串已导出到: D:\test.a

当然,有时你可能还想顺带看一下这个文件的hash,程序也可以做到。

PS D:\SOFTAA> randgen -m n -c 10 -l 10 -o D:\test.a -hash md5
8990808568
1965685911
7118335732
1993266523
4357259980
6159903085
0133329410
0486488016
8100259401
3542695531
字符串已导出到: D:\test.a

--------------------------------------------------
MD5: 7ab18d71e95ddb19530c769d5edb10b8

也不仅限于MD5,还支持常用的SHA系列。

PS D:\SOFTAA> randgen -m n -c 10 -l 10 -o D:\test.a -hash md5,sha256
5755652442
9437539130
5583863500
2168345819
7847843405
3675630689
0673938416
6383203140
1044320805
5044641105
字符串已导出到: D:\test.a

--------------------------------------------------
MD5: aa0d4112bdee5a04db2ad5ef62eff61e
SHA256: 97f85e4dd0381723ba86265b6340513946018ed3d532ac224f072d421c4070db

或者完全一点,查看常用的hash算法或者查看程序支持的所有hash算法。

PS D:\SOFTAA> randgen -m n -c 10 -l 10 -o D:\test.a -hash n
1092011089
5159752056
2299099061
0761860247
9569788272
2344309456
6885196300
4529857780
7342561984
3493166382
字符串已导出到: D:\test.a

--------------------------------------------------
MD5: 5b160d16e62771dc9082cb347402d28f
SHA1: 7309b1ea895d8a8954ae0a041d74196480f15a68
SHA256: 1403ae1f50ffe324fe368e8b1ddd48125d91dff393a5959b676053773e058687
SHA512: 5963aa43d5b1a4c7c550cd3d5269f404198d34c504ad81dc0e4124c4085a5a2610f6c944dfd402bbf9e40bdb2121f66c02b5f952ff4e8098e89348cc594ba22a

PS D:\SOFTAA> randgen -m n -c 10 -l 10 -o D:\test.a -hash a
1270830098
6544374604
4211518941
1535748260
6647540155
1289344347
4019534723
8131052034
2956244168
9554345036
字符串已导出到: D:\test.a

--------------------------------------------------
MD5: 9181ec7c35a7532d30a659ed4f530db6
SHA1: d164f896dd745d9ba6357a9952fe2bb8cd0d51b8
SHA256: 53cfd92b3f86c67121b254eecd105afa46e0e080ffa0e0dc129977774d6b7c82
SHA512: e5d98c474c6c09d0f14e6274a7ecf2519990427569364da5a6b8f7997f2503879bb44bc92a91afb341427e2ee692b23c3d60e219fae4e2ea314b1b9258d288e6
SHA3_224: 0e808cb85eb7060674544f5c1489cdd43a490ed28b1baff9cda9e86f
SHA3_256: b765fac497bc201dd20b8ab5cc9db0e0bac47d660f689ffb0527b84e67d7e076
SHA3_384: 853cfc518047e986580040243f1a5617537600871635f199f86e36a888457bcf3c6a50ca5ff8ba6cfae2a0677661994e
SHA3_512: 1cbe2d6ffbdc52d552f11a62abd488488f7fe83733a5a1238f9e4ebccf1c94cb852467cb27602e714d551c3978b125447e855686da3e81b726f5b07f97537c08

n代表常用的算法,a代表所有支持的算法。

当然,也不一定要保存到文件才能看hash。

PS D:\SOFTAA> randgen -m n -c 10 -l 10 -hash n
2870910685
1559383740
7827169190
7815854834
1483252450
8282966444
9493443530
0543018881
5958465369
3973747109

--------------------------------------------------
MD5: dc2be51854cdc63130e2813c666c2ec4
SHA1: 6a630613604aadcb62696aac18a2d88c94f738e9
SHA256: 05a78875dfc3fe85748749a09fd2683367704302ed2c37942970e3cad1a97437
SHA512: e89ac8707915761be6f8fca4f68a38694e44699e2ddd9664df781344db35ab6febd27d01abff6bce922381ee98e23c0c9c2f4319001fff26ac6daf3cf173c6eb

有些时候,你可能要设置密码或者token什么的,不想让程序把字符串输出到命令行,保存到文件就行。

这时,加入-nv选项,程序就不会把字符串输出到命令行。

PS D:\SOFTAA> randgen -m n -c 10 -l 10 -hash n -nv -o D:\test.a
字符串已导出到: D:\test.a

--------------------------------------------------
MD5: bf85d04d5585b028f40e9c9b18e4712f
SHA1: 0f508229f0799fcce537a41e0313a5073514fe54
SHA256: 57aa0f03eac783adf1268c002535a6ae3379001e3d0c317b329d61abda295ccc
SHA512: 2cac298b26a57269e23b88e69f8e98fc337663d60a0688d2f3e089d6bf09b5defab508ca1379cab3cefc1fe064b03f3554aea9fcaa8b72c16bacb10abbcae1f4

为了直观点,我加了hash选项,当然也可以做到真的什么也不输出。

4.自定义可选字符(cc)

有时我们只想要一些选择的字符,不需要其他的字符来组成字符串。

使用-m cc就可以做到。

PS D:\SOFTAA> randgen -m cc -i 12345ABCDE -c 5
13BD2112
1DBC4A1D
3B1AA12D
5EBCE4AC
512DEA34

可以看到,字符串里只出现了12345ABCDE这几个字符。其中,-i用于指定字符。

如果-i里出现了重复的字符也没关系,但是会增加这个字符在字符串里出现的权重。

PS D:\SOFTAA> randgen -m cc -i 1AB -c 5 -l 10
BAAABA1BA1
B1BBBABBA1
B1A111ABB1
BABB1AAA1B
AA11ABAAAB
PS D:\SOFTAA> randgen -m cc -i 1AAAAAAAAAAAAAAAAAAAAAAAAAB -c 5 -l 10
AAAAAAAAAA
AAAAAAAAAA
AAAAAAAAAA
AAAAA1AAAA
AAAAAAAAAA

cc模式现在有个小问题,就是-i指定的字符里不能有”-“,不过在表达式里可以用。

5.表达式的使用

现在到了最重要的部分,表达式。

如果你能学会使用它,那么至少在使用这个程序是很方便的。

假如我们需要XXXXX-XXXXX-XXXXX这种格式的随机字符串,总不能一段一段拼起来吧。

我们可以:

PS D:\SOFTAA> randgen -m "[an(5),-,an(5),-,an(5)]" -c 5
YynN4-AdbsC-nRMvO
LaIkt-6TVD7-rQExn
PNVT3-wYHNX-MvUUI
KraVc-2HcLo-9sJUn
ttlcj-IqmIL-qdfMS

又或者,你需要一些随机的电子邮箱:

D:\cloud\项目>python randgen.py -m "[an(12),'@test.com']" -c 10
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

是不是很厉害:)

这里的表达式不是正则表达式,而是我用半天时间给gemini描绘的简单表达式。

使用表达式的时候,必须是”[]”这样的双引号里带中括号的格式。

就以”[an(5),-,an(5),-,an(5)]”这个来解释吧,an(5)指的是数字字母混合,长度为5。逗号的作用是进行分割表达式,如果程序检测到一个部分不是表达式的关键字,就把它当作拼接文本来看待。

PS D:\SOFTAA> randgen -m "[an(5;S),-,an(5;S),-,an(5;S)]" -c 5
XLTBS-3YRZB-JXDO3
QTC2O-XN84B-K433W
PDOGC-H0XDS-VQRCK
IT91R-W9CUK-KNSBG
JUKSN-PA9RD-JN4Y1

每个模式都有自己的额外参数,an(5;S)就代表长度位5的数字字母混合,但是字母大写。和-S的效果是一样的,当然你也可以额外加一个-S。-s和-S的优先级更高,会无视表达式转换全局的字母。

参数必须使用分号来分开。

再比如:

D:\cloud\项目>python randgen.py -m "[n(r),-,n(5)]" -c 5
97135628450440933077258648301-34845
03797764601-20199
1654281-95531
17607350490-47115
929-17744

数字模式没什么参数,无非就是r随机或者给一个值来指定一个长度。

如果你正好需要表达式的关键字作为一个拼接文本,可以加上单引号。

D:\cloud\项目>python randgen.py -m "['n(r)',-,'n(5)',-,n(10)]" -c 5
n(r)-n(5)-8653520504
n(r)-n(5)-4767321231
n(r)-n(5)-8799354170
n(r)-n(5)-3607380459
n(r)-n(5)-7292899820

这样,关键字会被程序当成文本对待。

D:\cloud\项目>python randgen.py -m "[a(r;nr;S)]" -c 5
NMEV
NYKUFLHZTR
GZMYHCOR
KLNSBMCPYFOR
Q

D:\cloud\项目>python randgen.py -m "[a(r;s;nr)]" -c 5
rwpzumifcyktxoqajb
bjltniqravudpoymcekxg
wrxybtcuamiqpjzlv
miojkwpcqh
iqhbuns

D:\cloud\项目>python randgen.py -m "[a(10;s;nr)]" -c 5
hfzjkatuqs
qjxzuyfbvt
tmjglsapqn
qpcoztwgyl
kdwpthruvg

对于a和an,第一个参数必须是长度,nr和s的位置可以调换。

还有cc模式,这个应该是参数最多的了。

D:\cloud\项目>python randgen.py -m "[cc(10;qwertyuiopasdfghjk)]" -c 5
wwietfusts

cc模式的参数特别一点,必须保证第一个参数是长度,第二个参数是选词,后面的附加参数随意。

D:\cloud\项目>python randgen.py -m "[cc(10;qwertyuiopasdfghjk;nr;S)]" -c 5
HKUIYQDTGA
PTUQEOSWHI
PUGJDIWRHQ
IREJYOPTHG
ROPAESITYD

D:\cloud\项目>python randgen.py -m "[cc(10;qwertyuiopasdfghjk;S;nr)]" -c 5
OTQUSAJPRD
IFSAGYWQPT
ATPUIFSROH
QOWISEJFPT
RPADKUEFGS

D:\cloud\项目>python randgen.py -m "[cc(r;qwertyuiopasdfghjk;S;nr)]" -c 5
JPRSIHTDUWYOF
UEOKWHR
TYGDIOE
HWKRTYUQGSF
UHPRFJSD

表达式可以同时加入不同的模式,如:

D:\cloud\项目>python randgen.py -m "[n(5),-,a(5),-,an(5),-,u]" -c 5
21971-AdOfp-QJuJ1-7c8193e4-baec-4db8-911d-bf76c9ae14cc
40977-ufizH-gJlYU-2e0ba824-ec09-40cd-948e-97d372cfa94b
04629-CYGSw-JhbAe-ab253e38-3af7-41a7-9a3f-1f77eb57a8ea
73033-qRasf-CjoYM-5b338579-23a0-4083-8f4a-55bec089e493
42624-mjGTI-gHmsx-dd65b999-6f43-49d3-9ed1-6135a00ff275

没错,它甚至可以把UUID模式也加进去。

同样的,uuid也支持用s控制大小写。

D:\cloud\项目>python randgen.py -m "[n(5),-,a(5),-,an(5),-,u(S)]" -c 5
48634-puzbD-8zo6I-4CB841B6-37FB-4810-A06B-77ED7DE7D862
27643-tIyuD-DrDe7-7D9B790A-F7CA-4F74-AE3C-B1392B4D6C80
91511-VDjDY-vnCKA-D73BF2AA-0AC2-40C0-9C2D-04717D2F0C36
11441-Thsni-u9vic-4046FAD2-3104-4C75-B8F6-ADD3D460D108
04285-AegkL-zpgGD-AF23138F-2ED0-4979-8611-9F55BE74EED2

表达式的基本介绍就到这了,简单来讲就是模式给参数然后加逗号而已,具体的话看大家怎么用了。

6.自定义配置

表达式真是太方便了!想要什么格式直接设置就好了。

但是,如果是复杂一点的格式,或者是复杂一点的cc选词,总不能每次使用一遍一遍输入吧?

randgen还有另外一大功能,保存你的表达式和cc选词。

D:\cloud\项目>python randgen.py -m w -add re UUID "[an(8;S),-,an(4;S),-,an(4;S),-,an(4;S),-,an(12;S)]"
已添加配置: UUID

这个命令的意思是,模式w,添加类型为表达式,名字为UUID,最后是表达式。

看不明白?

randgen.py -m w -add re UUID “[an(8;S),-,an(4;S),-,an(4;S),-,an(4;S),-,an(12;S)]”

re指定这是一个表达式,UUID是名称,你可以自定义,最后是表达式。

D:\cloud\项目>python randgen.py -m w -list
自定义配置:
  my_re: 类型=re, 值='[n(10),-,u]'
  complex: 类型=re, 值=[n(6),-,cc(4;abcd;nr),-,a(3;S)]
  my_cc: 类型=cc, 值=abcd
  UUID: 类型=re, 值=[an(8;S),-,an(4;S),-,an(4;S),-,an(4;S),-,an(12;S)]

这个简单,列出你现在保存的配置。

那么,如何使用配置呢?

只需要在-m后面,加上$<你的配置名称>就可以了。比如:

D:\cloud\项目>python randgen.py -m $UUID
G2RLN1RA-B300-A2HM-LBM9-55K1CMEIQ78X

这同样支持一些基础参数:

D:\cloud\项目>python randgen.py -m $UUID -c 5 -s -hash n -o test.a
xm9evzty-kn5m-euzh-fi1n-fvzo5uz8p03z
bz3v1rvb-cu5f-5vtl-17ox-s0jgmoa3vuly
kpsa8za6-2rw7-bmsl-v7nc-ejsdvhftfy3v
bw4vldle-hen3-3euv-u8wx-xq94fb67y02e
g870xq5a-dmyz-o6kh-lsd8-x3u3sjs18uui
字符串已导出到: test.a

--------------------------------------------------
MD5: ea4f2c282b870236121486b72f5a78c6
SHA1: 31d4fdbd4b45b1b7e4e39be863853e4dcd460e2a
SHA256: b0b84761ded9c0f471c94d63cfc834542d292ca25ecee862f81410abebd8e824
SHA512: a1fd25301ea7d40a801efbdfcdf08c7740b2a5ec9da460aae7e634b229b70b9cd265018a4197ad54aedb14ad640f0c29d6415ec95991c69370e2d850bc21f18a

这比每次使用时打一长串的表达式更方便。

接下来是cc选词:

D:\cloud\项目>python randgen.py -m w -add cc test 123456abcdef
已添加配置: test
D:\cloud\项目>python randgen.py -m $test -c 5 -l 5 -nr
fce6d
a5bec
63db5
6efab
5dca4

不过cc的-r可能有些问题,不指定长度的时候,每次获取的一批字符串都统一是随机长度。再次获取又是随机长度,正常情况下不加-l和-r时默认长度是8,-r的话即使是同一批字符串但应该都是不同长度。

不过好在-l没有问题,-r也无所谓了。

有时要对配置进行更改,可以用-up。

D:\cloud\项目>python randgen.py -m w -up cc test qwertyui
已更新配置: test

事实上只是-add换了个名字,用法都一样。。。

删除配置:

D:\cloud\项目>python randgen.py -m w -rm test
已删除配置: test

很简单,带上名字就行。

7.最后

好了,这篇教程到此为止。

如果程序有问题的话,可以去Github开一个issue。

https://github.com/TRFCUTTFwww/randgen

不过既然是python,好像也可以随便丢给一个AI来修一修。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇