我为我的软件生成密钥:
Guid.NewGuid().ToString();
返回类似:15c6bd70-8d3c-42d0-bb24-40da6e08ed9d
无论如何,每当有人购买新软件时,我都会生成一个新密钥。可以两次生成相同的密钥吗?每当有人购买软件时,我都称之为方法:Guid.NewGuid().ToString()
我应该在每个guid的末尾附加一个计数器,以100%确定不会有重复项吗?
Guid
类的构造函数采用16字节的字节数组作为参数。如果序列化当前日期(8个字节),然后将另外8个随机字节附加到GUID的构造函数,那将是100%安全吗?我只是根据你的答案要求学习我可能只有Guid.NewGuid()
答案 0 :(得分:4)
有关Guid的最佳blog series之一的摘录:
制作唯一GUID有许多可能的策略,实际上有关所用策略的信息是在第三个“组”的前四位编码的;几乎您看到的每个GUID都是{xxxxxxxx-xxxx-1xxx-xxxx-xxxxxxxxxxxx}或{xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx}。
如果那个地方有一个,那么用于保证唯一性的算法本质上是ISBN策略的变体。通过选择一些位作为机器中网卡的MAC地址,保证GUID在空间中是唯一的。 (确保世界上没有两个网卡具有相同MAC地址的棘手问题是由其他人以某种方式解决的;如何解决该问题,我们并不特别关心。解决该问题的成本会转嫁给您消费者,购买网卡的费用。)
简而言之,非常不可能他们会碰撞。
答案 1 :(得分:4)
是的,这是可能的,但极不可能。 GUID冲突的可能性几乎与GUID中的一些内容在内存中自发地发生变化一样,而且这种情况并不是您通常担心的事情。
你已经100%肯定,当然如果你不是说你需要100.000000000000000000000000000000000000%肯定。
答案 2 :(得分:0)
只需使用Guid ..无需附加任何内容。除非你期望销售的副本多于宇宙中的原子(不太可能)。