WireGuard-vanity-keygen: WireGuard vanity key generator
WireGuard 个性化密钥生成器:WireGuard-vanity-keygen
axllent/wireguard-vanity-keygen
用于 WireGuard 的命令行个性化(公共)密钥生成器。 默认情况下,它仅匹配生成的公钥的前缀,而不考虑搜索是否与公钥中的任何位置匹配。 这个概念基于 wireguard-vanity-address,但我想要更精简的东西。
功能特性
- 生成符合规范的 curve25519 私钥和公钥
- 可配置的多核处理(默认为所有核心)
- 可选的大小写敏感搜索
- 可选的正则表达式搜索
- 一次搜索多个前缀
- 达到结果限制后退出(默认为 1)
- 基于快速基准测试显示概率和估计运行时间
使用选项
Usage: wireguard-vanity-keygen [OPTIONS] <SEARCH> [<SEARCH>...]
Options:
-c, --case-sensitive 大小写敏感匹配 (默认 false)
-t, --threads int 线程数 (默认为所有可用核心数减 1)
-l, --limit int 限制结果为 n (达到后退出) (默认 1)
示例
$ wireguard-vanity-keygen -l 3 test pc1/ "^pc7[+/]"
Calculating speed: 49,950 calculations per second using 4 CPU cores
Case-insensitive search, exiting after 4 results
Probability for "test": 1 in 2,085,136 (approx 41 seconds per match)
Probability for "pc1/": 1 in 5,914,624 (approx 1 minute per match)
Cannot calculate probability for the regular expression "^pc7[/+]"
Press Ctrl-c to cancel
private OFVUjUoTNQp94fNPB9GCLzxiJPTbN03rcDPrVd12uFc= public tEstMXL/3ZzAd2TnVlr1BNs/+eOnKzSHpGUnjspk3kc=
private gInIEDmENYbyuaWR1W/KLfximExwbcCg45W2WOmEc0I= public TestKmA/XVagDW/JsHBXk5mhYJ6E1N1lAWeIeCttgRs=
private yDQLNiQlfnMGhUBsbLQjoBbuNezyHug31Qa1Ht6cgkw= public PC1/3oUId241TLYImJLUObR8NNxz4HXzG4z+EazfWxY=
private QIbJgxy83+F/1kdogcF+T04trs+1N9gAr1t5th2tLXM= public Pc7+h172sx0TfIMikjgszM/B8i8/ghi7qJVOwWQtx0w=
private +CUqn4jcKoL8pw53pD4IzfMKW/IMceDWKcM2W5Dxtn4= public teStmGXZwiJl9HmfnTSmk83girtiIH8oZEa6PFJ8F1Y=
private EMaUfQvAEABpQV/21ALJP5YtyGerRXAn8u67j2AQzVs= public pC1/t2x5V99Y1SBqNgPZDPsa6r+L5y3BJ4XUCJMar3g=
private wNuHOKCfoH1emfvijXNBoc/7KjrEXUeof7tSdGWvRFo= public PC1/jXQosaBad2HePOm/w1KjCZ82eT3qNbfzNDZiwTs=
private gJtn0woDChGvyN2eSdc7mTpAFA/nA6jykJeK5bYYfFA= public Pc7+UEJSHiWsQ9zkO2q+guqDK4sc3VMDMgJu+h/bOFI=
private IMyPmYm/v0SPmB62hC8l6kfxT3/Lfp7dMioo+SM6T2c= public Pc7/uVfD/ZftxWBHwYbaudEywUS61biBcpj5Tw830Q4=
安装
下载适用于您系统的 最新二进制版本,或从源代码构建 go install github.com/axllent/wireguard-vanity-keygen@latest
。
耗时
为了让您大致了解生成密钥所需的时间,下表列出了在一个系统上查找匹配密钥的估计时间,该系统在启动时报告"Calculating speed: 230,000 calculations per second using 19 CPU cores
":
| 长度 | 大小写不敏感 | 大小写敏感 | | ------- | -------- | -------- | | 3 个字符 | 0 秒 | 1 秒 | | 4 个字符 | 9 秒 | 1 分钟 | | 5 个字符 | 5 分钟 | 1.25 小时 | | 6 个字符 | 4 小时 | 3.5 天 | | 7 个字符 | 6 天 | 7 个月 | | 8 个字符 | 7 个月 | 38 年 | | 9 个字符 | 22 年 | 175 年 |
请注意,以上时间是针对单个搜索词查找匹配密钥的时间。 传递多个搜索词不会显着增加查找任何单个词条的时间,但是查找所有搜索词的时间是所有估计时间的总和。 此外,将限制增加到两个 (--limit 2
) 会使估计时间加倍,三个将使时间加三倍,依此类推。
如果任何搜索词包含数字,则时间将介于大小写不敏感和大写小写敏感列之间。
当然,您的结果会有所不同,具体取决于您的 CPU 核心的数量和速度。
正则表达式
由于搜索词中每增加一个字母都会呈指数级增加搜索时间,因此使用正则表达式进行搜索可能会大大缩短时间。 以下是一些示例:
.*word.*
- 在密钥中的任何位置查找单词(word.*
和.*word
也有效)^.{0,10}word
- 在密钥的前 10 个字母中的任何位置查找单词word1.*word2
- 查找两个单词,在密钥中的任何位置^[s5][o0][ll]ar
- 在密钥开头查找“solar”,或视觉上相似的“s01ar”^(best|next)[/+]
- 在密钥开头查找“best”,或“next” best,并以/
或+
作为分隔符
有关 Go 的正则表达式语法的良好指南,请访问 https://pkg.go.dev/regexp/syntax。
要在正则表达式中包含字面 +
,请在其前面加上反斜杠:^ex\+
。
注意:如果您的搜索词包含 shell 元字符,例如 |
或 ^
,则需要将其引用起来。 在 Windows 上,必须使用双引号。 例如:"^(a|b)"
。
注意:复杂的正则表达式,例如那些使用转义序列、标志或字符类的表达式,可能永远无法匹配密钥。 为避免这种情况,请考虑使用 此工具 在 The Go Playground 上或 goplay.tools 上的相同工具测试您的正则表达式。
常见问题解答
我可以搜索哪些字符?
有效字符包括 A-Z
、a-z
、0-9
、/
和 +
。 哈希中没有其他字符。
您还可以使用正则表达式进行搜索。
为什么 test
和 tes1
显示不同的概率,尽管它们每个都有 4 个字符?
对于不区分大小写的搜索(默认),a-z 有机会匹配大写和小写。 搜索“cat”可以匹配 Cat
、cAT
等。
估计时间有多准确?
它们不准确(也无法准确)。 密钥是完全随机生成的,并且估计基于平均法则。 例如,您可能会在第一次尝试中找到十亿分之一的机会的匹配项,或者可能需要尝试 50 亿次。 但是,它会根据您的 CPU 速度、字数统计、大小写敏感性以及数字或字符的使用情况为您提供指示。
我为什么需要这个?
你不需要。 我编写它是为了因为我运行一个 WireGuard 服务器,该服务器没有提供任何关于密钥属于谁的参考(服务器上的 wg
)。 使用个性化密钥,我至少可以识别连接。 我也想更多地了解 Golang 中的多核处理。