5

我正在尝试创建一个独特的 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) 作为来源的一部分。我们每周生成唯一键的次数不会超过一次,因此这个值经常变化,足以达到唯一初始值的目的。

我可以使用什么算法来生成唯一密钥?

4

5 回答 5

6

创建字符串<providername>000001,<providername>000002等或其他任何内容并使用公钥对其进行加密,这就是用户输入的“CD-KEY”。使用私钥解密 CD-KEY 并验证在解密时您是否获得了具有有效提供者名称的有效字符串。

于 2009-05-21T16:48:48.247 回答
1

信用卡号码使用Luhn 算法,您可能想查看类似的内容。

于 2009-05-21T10:59:00.497 回答
1

我使用 SeriousBit Ellipter链接进行软件保护,但我看不出有任何理由您可以每周生成一组唯一密钥,并且当您进入您的网站时,我们的库会验证密钥的有效性。您还可以将可选服务编码到密钥中,以便您控制如何从密钥处理样本(如果您有不同的服务级别)。

由于它首先使用加密的密钥生成方法并且相对便宜,因此我会说它当然值得一看。

于 2009-05-21T11:16:58.900 回答
1

我终于选择了这种形式的 cd-key

<TIMESTAMP>-<incremented number>-<8 char MD5 hash>-<checksumdigit>

我使用了 mod 11 ISBN 校验和数字算法。

于 2011-02-04T05:36:10.217 回答
-1

生成 GUID 并为其连接一个随机数。GUID 保证是唯一的,随机数将使其不可能意外命中代码。只是不要以任何方式修改 GUID,否则您可能会损害其唯一性。

http://msdn.microsoft.com/en-us/library/aa475087.aspx

于 2009-05-21T12:04:36.573 回答