0

我为我的软件生成密钥:

Guid.NewGuid().ToString();

返回类似:15c6bd70-8d3c-42d0-bb24-40da6e08ed9d

无论如何,每当有人购买新软件时,我都会生成一个新密钥。我可以两次生成相同的密钥吗?每次有人购买该软件时,我都会调用该方法:Guid.NewGuid().ToString()我是否应该在每个 guid 的末尾附加一个计数器以 100% 确保不能重复?

编辑

类的构造函数将Guid16 字节的字节数组作为参数。如果您序列化当前日期(8 个字节),然后将另外 8 个随机字节附加到 GUID 的构造函数,这将是 100% 安全的吗?我只是根据你的答案要求学习,我可能只会有Guid.NewGuid()

4

3 回答 3

4

是的,这是可能的,但极不可能。GUID 冲突的可能性与 GUID 在内存中自发变化的可能性差不多,而这种事情通常不是您担心的。

你已经可以 100% 确定了,当然,如果你不是说你需要 100.0000000000000000000000000000000000000% 确定的话。

于 2013-09-17T19:51:56.913 回答
4

摘自有史以来关于 Guid的最佳博客系列之一:

制作唯一 GUID 有多种可能的策略,事实上,有关所用策略的信息被编码在第三个“组”的前四位中;您看到的几乎每个 GUID 都将采用 {xxxxxxxx-xxxx-1xxx-xxxx-xxxxxxxxxxxx} 或 {xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx} 的形式。

如果那个地方有一个,那么用于保证唯一性的算法本质上是 ISBN 策略的变体。通过选择一些位作为机器中网卡的 MAC 地址,可以保证 GUID 在“空间”中是唯一的。(确保世界上没有两个网卡具有相同 MAC 地址的棘手问题由其他人以某种方式解决;该问题如何解决,我们并不特别关心。解决该问题的成本转嫁给您,消费者,在网卡的购买成本中。)

简而言之,它们发生碰撞的可能性很小。

于 2013-09-17T19:46:36.763 回答
0

只需使用 Guid .. 无需附加任何内容。除非您期望卖出的副本数量超过宇宙中的原子数量(不太可能)。

于 2013-09-17T19:44:00.207 回答