我想知道是否有一种方法可以生成有效的 GUID/UUID,其中第一部分(或任何部分)是用户选择的前缀。
即,GUID 的格式为 AAAAAAAA-BBBB-CCCC-DDDD-DDDDDDDDDDDD,我想将任何部分设置为预定义值(最好是 AAA)。目标是让 GUID 仍然是全局唯一的,但它们不需要加密安全。
最佳答案
抱歉,您对 GUID 的要求太多了。从您的问题和您自己的答案/更新中总结,您希望它
- 1 是一个 GUID
- 2 不与任何其他 GUID 冲突(全局唯一)
- 3 忽略第一位解释的标准,使用保留值
- 4 对剩余部分使用个人方案
这是不可能的,证明: 如果可能的话,我可以生成一个 GUID G1,而您可以生成另一个 GUID G2。由于我们都忽略了标准并使用相同的保留前缀,而我对其他位的个人方案不在您的控制范围内,因此我的 GUID G1 可能会与您的 GUID G2 冲突。 GUID的非冲突性源于坚持GUID标准。
防止碰撞的机制确实本质上是隐私敏感的。如果我随机生成一个 GUID G1,如果满足两个条件,我可以保证随机 GUID 是唯一的:
- 1 它是我控制下的 GUID 子集的成员,并且
- 2 我之前没有生成 GUID。
对于您控制的子集之外的 GUID,您无法保证 (2)。但是如何将不重叠的 GUID 子集分配给一个人呢?使用 NIC 的 MAC 是一种简单有效的方法。其他方式也是可能的。但无论如何,仅存在这样一个子集就会涉及隐私。它必须属于某个人,我必须能够确定那是我还是其他人。证明两个随机 GUID G1 和 G2 是否属于同一子集(即人)有点困难,但当前方案(您反对)不会试图隐藏这一点。
关于c# - 使用设置的前缀创建 GUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/352674/