【发布时间】:2013-09-17 19:41:55
【问题描述】:
我为我的软件生成密钥:
Guid.NewGuid().ToString();
返回类似:15c6bd70-8d3c-42d0-bb24-40da6e08ed9d
无论如何,每当有人购买新软件时,我都会生成一个新密钥。我可以两次生成相同的密钥吗?每次有人购买该软件时,我都会调用该方法:Guid.NewGuid().ToString()我是否应该在每个 guid 的末尾附加一个计数器以 100% 确保不能重复?
编辑
Guid 类的构造函数将 16 字节的字节数组作为参数。如果您序列化当前日期(8 个字节),然后将另外 8 个随机字节附加到 GUID 的构造函数,这将是 100% 安全的吗?我只是根据你的回答要求学习我可能只有Guid.NewGuid()
【问题讨论】:
-
有可能,但非常不太可能。
-
除非您打算销售 quintillions 的副本,否则您会没事的。
-
@DmitryBrant:“Quintillions”在计算中足够接近“零”,即使是这么多在统计上也无关紧要。
-
@David 我的意思是说“亿万”
-
Quintillions, zillions, bajillions... 你们正在进入一个语义迷宫。重要的是,两个 GUID 发生冲突的几率比 Valve 发布半条命 3 的几率要小,或者比 Opera 成为市场上最受欢迎的浏览器的几率要小。