我正在尝试创建一个独特的 CD-KEY 放入我们产品的包装盒中,就像用户用来注册产品的标准软件盒中的普通 CD-KEY 一样。
但是,我们不销售软件,我们销售用于犯罪和医疗目的的 DNA 采集工具包。用户将通过邮件收到带有 CD-KEY 的唾液收集工具包,他们将使用该 CD-KEY 在我们的网站上创建一个帐户并获得结果。测试结果将链接到 CD-KEY。这是我们必须将结果与患者联系起来的唯一方法。因此,重要的是它不会失败:)
其中一项要求是 CD-KEY 列表必须充分“分散”开,这样就不可能有人输入了错误的 CD-KEY 并且仍然将其批准用于其他工具包,从而混淆了两个工具包。这可能会让我们承担数千美元的责任。
比如不能是
00001
00002
00003这样的递增的数字序列
……
原因是如果有人收到了00002套件,但不小心注册为000003,那么他的结果会匹配到其他人。所以它必须像信用卡号码......除非输入有效序列,否则您随机命中有效号码的机会是百万分之一......
此外,我们每年向各种供应商销售超过 50,000 个套件(他们将使用我们的算法生成自己的 CD-KEYS),因此我们无法维护所有先前发行的 CD-KEYS 的列表以检查是否重复。该算法必须生成唯一的 CD-KEY。
我们还需要能够使用快速检查算法验证 CD-KEY 是否有效,以便我们可以通知用户他输入的代码是否无效。这留下了我相信的许多散列或 MD5 算法。它不可能是 128 位,因为谁会花时间在电脑屏幕上输入它?
到目前为止,这就是我认为最终 CD-KEY 结构的样子
(4 个字符产品代码)-(4 个字符经销商代码)-(12 个字符唯一,可验证的 CD-KEY)
例如。384A - GTLD - {4565 - FR54 - EDF3}
为了确保 KEYS 的唯一性,我可以将当前日期 (20090521) 作为来源的一部分。我们每周生成唯一键的次数不会超过一次,因此这个值经常变化,足以达到唯一初始值的目的。
我可以使用什么算法来生成唯一密钥?