我正在尝试创建一个唯一的CD-KEY,放在我们产品的盒子里,就像标准软件盒子中找到的普通CD-KEY一样,用户用它来注册产品。
然而,我们并不销售软件,我们销售用于犯罪和医疗目的的DNA采集套装。用户将通过邮寄收到一份唾液采集套装,其中包含CD-KEY,他们将使用该CD-KEY在我们的网站上创建帐户并获取结果。测试结果将与CD-KEY相关联。这是我们将结果与患者关联的唯一方法。因此,它非常重要,不能出错:)
其中一个要求是,CD-KEY列表必须足够“分散”,以便没有人输入不正确的CD-KEY并仍然被批准为其他套装,从而混淆两个套装。这可能会给我们造成数千美元的责任。
例如,它不能是数字的递增序列,例如
00001
00002
00003
...
原因是如果有人收到00002套装,但意外地将其注册为000003,则他的结果将与其他人匹配。所以它必须像信用卡号码一样......除非输入有效序列,否则随机命中有效号码的机会是100万分之一......
此外,我们每年向各种供应商销售超过50,000个套装(他们将使用我们的算法生成自己的CD-KEYS),因此我们无法维护所有先前发出的CD-KEYS列表以检查重复。该算法必须生成唯一的CD-KEYS。
我们还需要能够使用快速检查算法验证CD-KEY是否有效,以便我们可以通知用户输入的代码是否无效。我认为这排除了许多哈希或MD5算法。它也不能是128位,因为谁会花时间在计算机屏幕上输入它呢?
到目前为止,这就是我认为最终CD-KEY结构将如何
(4个字符的产品代码) - (4个字符的经销商代码) - (12个字符的独特、可验证的CD-KEY)
例:384A - GTLD - {4565 - FR54 - EDF3}
为确保KEYS的唯一性,我可以将当前日期(20090521)作为源的一部分。我们不会生成超过一周的唯一密钥,因此该值足够经常更改以实现唯一初始值的目的。
我可以使用什么可能的算法来生成唯一密钥?
然而,我们并不销售软件,我们销售用于犯罪和医疗目的的DNA采集套装。用户将通过邮寄收到一份唾液采集套装,其中包含CD-KEY,他们将使用该CD-KEY在我们的网站上创建帐户并获取结果。测试结果将与CD-KEY相关联。这是我们将结果与患者关联的唯一方法。因此,它非常重要,不能出错:)
其中一个要求是,CD-KEY列表必须足够“分散”,以便没有人输入不正确的CD-KEY并仍然被批准为其他套装,从而混淆两个套装。这可能会给我们造成数千美元的责任。
例如,它不能是数字的递增序列,例如
00001
00002
00003
...
原因是如果有人收到00002套装,但意外地将其注册为000003,则他的结果将与其他人匹配。所以它必须像信用卡号码一样......除非输入有效序列,否则随机命中有效号码的机会是100万分之一......
此外,我们每年向各种供应商销售超过50,000个套装(他们将使用我们的算法生成自己的CD-KEYS),因此我们无法维护所有先前发出的CD-KEYS列表以检查重复。该算法必须生成唯一的CD-KEYS。
我们还需要能够使用快速检查算法验证CD-KEY是否有效,以便我们可以通知用户输入的代码是否无效。我认为这排除了许多哈希或MD5算法。它也不能是128位,因为谁会花时间在计算机屏幕上输入它呢?
到目前为止,这就是我认为最终CD-KEY结构将如何
(4个字符的产品代码) - (4个字符的经销商代码) - (12个字符的独特、可验证的CD-KEY)
例:384A - GTLD - {4565 - FR54 - EDF3}
为确保KEYS的唯一性,我可以将当前日期(20090521)作为源的一部分。我们不会生成超过一周的唯一密钥,因此该值足够经常更改以实现唯一初始值的目的。
我可以使用什么可能的算法来生成唯一密钥?