Xray x25519 密钥对、linux 中的 base64、golang 中的 base64.RawURLEncoding
玩了一下 Xray 上面的 Reality, 对其中生成 x2519 密钥对的过程感兴趣,拿到源码一看,还可以用 -i 参数带私钥进去计算公钥。
放
head -c 32 /dev/random | base64
生成的结果比如:
Fi/Ho3QZbkPwR4OwqUVSE5lEZag4wIX80tZ2VNr0edA=
拿着这个喂给 xray x25519 -i 却老是报错,比如:
illegal base64 data at input byte 2
再去查了一下资料,这才知道:
Golang
1. 编码字符集不同。base64.RawURLEncoding 按照
2. 解码方法不同。base64.RawURLEncoding 和标准
总之,base64.RawURLEncoding
在
然而,可以通过结合使用其他的工具以及 Linux 命令来实现类似于 base64.RawURLEncoding 算法的 Base64 编解码。
下面是一个实现 base64.RawURLEncoding 算法的例子:
1. 首先使用 echo 命令来输出需要编码的字符串,例如:
echo -n "Hello World"
-n 参数用来避免在输出中添加换行符。
2. 将输出的字符串通过管道符传递给 openssl 命令,使用 base64 编码:
echo -n "Hello World" | openssl enc -base64 -A | tr '+/' '-_' | tr -d '='
第一步使用 openssl enc 命令来进行 Base64 编码, -A 参数用来禁止 OpenSSL 在输出结果中添加换行符,以保证编码的正确性。
第二步使用 tr 命令替换掉生成的 Base64 编码中的 + 和 / 字符,前者替换成 -,后者替换成 _,以满足 base64.RawURLEncoding 的编码要求。
第三步使用 tr 命令删除末尾不需要的 = 字符,以保证编码后的结果长度更短。
因为这种方式需要依赖于其他的工具(例如 openssl、tr),所以可能会存在一些性能以及安全性上的潜在问题。如果你需要在生产环境中使用 Base64 编解码,最好使用专门为此目的编写的库函数,例如 Go 语言中提供的 encoding/base64 包。
感谢 ChatGPT
用下面这一段生成的
head -c 32 /dev/random | openssl enc -base64 -A | tr '+/' '-_' | tr -d '='
或者这样也是可以的
head -c 32 /dev/random | base64 -w 0 | tr '+/' '-_' | tr -d '='
评论
发表评论