-
Notifications
You must be signed in to change notification settings - Fork 4k
This issue was moved to a discussion.
You can continue the conversation there. Go to discussion →
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
VLESS UUID 映射标准:将自定义字符串映射为一个 UUIDv5 #158
Comments
配置文件是: |
@badO1a5A90 两边都可以使用任一方式,同出/入站多 UUID 时还可以混用 |
都可以使用任一方式, 那么客户端使用 UUID 也能反映射到服务端的正常字符串? |
@badO1a5A90 是的,因为这两个是完全等效的,只是配置文件不同,内存中都是同一个 UUID。 无需担心与现在常用的全随机 UUIDv4 冲突,因为标志位不一样,分别是 5 和 4。 |
五分钟撸了一个 Web App,但足够用了:https://xray-uuid.ducksoft.site/ |
补充: 对于汉字,Golang使用UTF-8字符集存储,默认用三个字节 |
@badO1a5A90 已补充标准正文 |
用普通话说就是 xray支持自定义密码了 |
建议给 xray uuid 命令增加一个 xray uuid map 命令 如: xray uuid map -id "我爱🍉老师1314" |
@badO1a5A90 计划加 -map 参数,xray uuid -map "example" 后续:加了 -i 参数, |
多说一句,python里面这么用:
输出: |
This issue was moved to a discussion.
You can continue the conversation there. Go to discussion →
VLESS UUID 映射标准:将自定义字符串映射为一个 UUIDv5
这个想法很早就有了,这里感谢 @DuckSoft 提议参照 UUIDv5 标准作为映射方式。
特别注意:切勿把本机制理解为某种加密,而应假定得到映射出的 UUID 即相当于得到原始文本。
1. 范围
长度为 1-30 字节的任意字符串(因为 UUID 字符串长为 32-36 字节,又额外排除了 0 和 31)
UTF-8 编码,比如数字、英文字母、符号等 ASCII 字符占 1 个字节,汉字通常占 3 个字节,emoji 通常占 4 个字节。
2. 方式
选取 16 字节的空 UUID 作为 namespace,自定义字符串即为 name,遵循 UUIDv5 标准进行一系列变换,最终生成 UUIDv5。
我参考 go.uuid 库写了个简单的实现,并输出同一个 UUIDv5 的两种形式:
字符串为
example
时,以上代码的输出为:也就是说下一个版本的 Xray-core 中,VLESS/VMess id 填
example
和feb54431-301b-52bb-a6dd-e1e93e81bb9e
是等价的。3. Q & A
Q: 为什么“范围”不包括更长的字符串?
A: 允许使用自定义字符串是方便记忆,过长的字符串也记不住,还不如直接用一个 UUID。
Q: UUIDv5 的 SHA-1 是否存在问题?
A: 不存在问题,因为我们只是需要把限定长度的字符串映射为不重复的 UUID 标识符,按照标准来即可。
补充
The text was updated successfully, but these errors were encountered: