【发布时间】:2022-11-17 18:33:58
【问题描述】:
我正在编写与一组 WireGuard 对等点一起使用的 Java 代码,并且想检查表示每个对等点的公钥的字符串是否实际上是有效密钥。
【问题讨论】:
标签: wireguard
我正在编写与一组 WireGuard 对等点一起使用的 Java 代码,并且想检查表示每个对等点的公钥的字符串是否实际上是有效密钥。
【问题讨论】:
标签: wireguard
我在 WireGuard mailing list 上找到了答案(由 Jason Donenfeld 自己撰写),但我觉得也适合在这里提供。
简而言之,公钥和私钥都是以 base 64 编码的 32 字节字符串,可以与此正则表达式匹配:
^[A-Za-z0-9+/]{42}[AEIMQUYcgkosw480]=$
他对最后两个字符的解释非常有用:
[...] 32 不能被 .75 整除,所以有一个填充字符 并且倒数第二个字符不包括整个 base64 字母。 43个base64字符最多可以表示258bits,多了 超过 256 位。
【讨论】: