在构建需要 URL 上的唯一标识符的基于 Java 的系统时,是更好的选择UUID.randomUUID()还是SecureRandom更好的选择?
更具体地说,调用POST /items将返回一个201 Created带有 Location 的新创建的/items/{id}where{id}是一个随机字符串,并且该 URL 旨在供匿名 HTTP 请求在有限的时间窗口内使用。
B-KEPLFdWNZ4JTUnnEq3Og此代码返回一个包含 128 位随机性的 22 个字符的字符串(例如)。
SecureRandom random = new SecureRandom();
byte bytes[] = new byte[16];
random.nextBytes(bytes);
Encoder encoder = Base64.getUrlEncoder().withoutPadding();
String token = encoder.encodeToString(bytes);
System.out.println(token);
UUID.randomUUID()是“用于检索类型 4(伪随机生成)UUID 的静态工厂。UUID 是使用加密强伪随机数生成器生成的。” 此代码返回一个 36 个字符的字符串(例如f0803ce7-8e3d-421a-8126-e5a0bd0a865f),具有 122 位随机性。
UUID randomUUID = UUID.randomUUID();
System.out.println(randomUUID);
这些标识符也将作为固定长度CHAR类型保存在关系数据库中。