删除随机生成的 UUID 中的“-”有多安全?

2022-08-31 13:14:41

我有这个代码:

String uuid = UUID.randomUUID().toString().replace("-", "");

删除生成的 UUID 中的“-”有多安全?删除它是否会破坏其全局唯一性的目的,并使生成的UUID容易发生冲突?


答案 1

如果删除生成的 UUID 中的“-”有多安全

它是100%安全的,因为破折号不是值的一部分。字符串 UUID 是 128 位值的十六进制表示形式。破折号仅用于显示目的,因此UUID在眼睛上会更容易一些。

在将形式的 UUID 传递到外部系统(如外部 API、数据库和此类性质的内容)时要小心。他们可能期望破折号在那里。String


答案 2

假设我想打电话给白宫。他们的电话号码是(202)456-1111。如果我从该电话号码中删除所有破折号和括号,我剩下2024561111。在此过程中,我没有丢失任何信息 - 我只是以一种使其更难阅读的方式更改了格式。如果我将此号码打入手机,它仍然可以正确拨打电话,因为电话系统仍然知道前三位数字是区号,接下来的七位是主号码。

同样,UUID中的破折号就像电话号码中的额外标点符号 - 它们被包括在内,以便人类更容易阅读一些潜在的大数字。在UUID中,该数字长128位,以十六进制书写,因此与电话号码不同,它不那么“明显”是一个数字,但基本原理是相同的。删除破折号不会更改数字,因此不会影响安全性。

现在,可能发生的事情是这样做会破坏跨平台的格式兼容性。让我们回到电话号码类比。我使用过的一些网站不允许我输入2024561111作为电话号码。他们会坚持要求我加上空格、破折号和括号,就像(202)456-1111一样。(我不是那种网站的粉丝,但那是另一回事了。因此,如果您需要将 UUID 的字符串表示形式传递到需要完整格式(包括逗号)的其他进程或服务中,则从 UUID 中删除短划线可能会成为一个问题。