我试图创建一个唯一的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)作为来源的一部分。我们不会每周多次生成唯一密钥,因此,为了唯一初始值的目的,此值经常会发生足够的变化。
我可以使用什么算法来生成唯一密钥?
创建字符串<providername>000001,<providername>000002等等或任何并将其与公共密钥加密,这就是你的“CD- KEY”的用户输入。使用私钥对CD-KEY进行解密,并验证解密后您会获得带有有效提供者名称的有效字符串。
<providername>000001
<providername>000002