Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 具有验证的唯一CD密钥生成算法_Algorithm_Primary Key_Unique - Fatal编程技术网

Algorithm 具有验证的唯一CD密钥生成算法

Algorithm 具有验证的唯一CD密钥生成算法,algorithm,primary-key,unique,Algorithm,Primary Key,Unique,我正在尝试创建一个独特的CD-KEY放入我们的产品盒中,就像用户用于注册产品的标准软件盒中的普通CD-KEY一样 然而,我们不卖软件,我们卖的是用于犯罪和医疗目的的DNA收集工具包。用户将通过邮件收到带有CD-KEY的唾液收集工具包,他们将使用该CD-KEY在我们的网站上创建帐户并获得结果。测试结果将链接到CD-KEY。这是我们将结果与患者联系起来的唯一方法。因此,重要的是它不会失败:) 其中一项要求是,CD密钥列表必须充分“分散”开来,这样就不可能有人输入错误的CD密钥,但仍被批准用于其他套件

我正在尝试创建一个独特的CD-KEY放入我们的产品盒中,就像用户用于注册产品的标准软件盒中的普通CD-KEY一样

然而,我们不卖软件,我们卖的是用于犯罪和医疗目的的DNA收集工具包。用户将通过邮件收到带有CD-KEY的唾液收集工具包,他们将使用该CD-KEY在我们的网站上创建帐户并获得结果。测试结果将链接到CD-KEY。这是我们将结果与患者联系起来的唯一方法。因此,重要的是它不会失败:)

其中一项要求是,CD密钥列表必须充分“分散”开来,这样就不可能有人输入错误的CD密钥,但仍被批准用于其他套件,从而混淆了两个套件。这可能会使我们损失数千美元的债务

例如,它不能是递增的数字序列,如
00001
00002
00003

原因是,如果有人收到工具包00002,但意外地将其注册为000003,那么他的结果将与其他人匹配。所以它一定像信用卡号码。。。除非输入有效序列,否则随机命中有效数字的几率为百万分之一

此外,我们每年向不同的提供商(他们将使用我们的算法生成自己的CD-Key)销售超过50000套套件,因此我们无法维护所有以前发行的CD-Key的列表,以检查是否存在重复。算法必须生成唯一的CD密钥

我们还需要能够使用快速检查算法验证CD-KEY是否有效,以便在用户输入的代码无效时通知用户。我相信这就省去了许多散列或MD5算法。它不能是128位,因为,谁会花时间在电脑屏幕上打印出来呢

到目前为止,这就是我所认为的最终CD-KEY结构 (4字符产品代码)-(4字符经销商代码)-(12字符唯一可验证CD-KEY)

例384A-GTLD-{4565-FR54-EDF3}


为了确保密钥的唯一性,我可以将当前日期(20090521)作为源的一部分。我们每周不会生成一次以上的唯一键,因此该值的更改频率足以达到唯一初始值的目的


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

信用卡号使用类似的方法。我使用SeriousBit Ellipter进行软件保护,但我不认为有任何理由您可以每周生成一组唯一密钥,并在输入时让库验证密钥的有效性进入你的网站。您还可以将可选服务编码到密钥中,以便控制如何从密钥处理样本(如果您有不同的服务级别)


因为它首先使用加密的密钥生成方法,而且相对便宜,所以我想说,它当然值得一看。

生成GUID并向其关联一个随机数。GUID保证是唯一的,随机数将使其不可能意外命中代码。只是不要以任何方式修改GUID,否则可能会影响唯一性


创建字符串
000001
000002
等,并使用公钥对其进行加密,这就是用户输入的“CD-key”。用私钥解密CD-KEY,并验证解密后您是否得到了一个具有有效提供者名称的有效字符串。

我最终决定使用这种形式的CD-KEY

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

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

如果密码术的安全性仅仅在于算法,那么它是不安全的,因为算法是保密的。:)最终的cd密钥将使用带有密钥的哈希类型算法进行加密。Verhoeff算法参考文件看起来更好,因为它将捕获转置错误。感谢您的建议。我试过了,但有点失望。如果我更改00001、00002等结尾处的序列号,它返回的cd密钥中只有一个值被更改。谢谢,这正是我要找的。你不是说用私钥加密,用公钥解密吗?不,他使用的术语是正确的。出于他的目的,他可以使用私钥或公钥进行加密,只要他使用另一个密钥进行加密。使用公钥/私钥时,如果其中一个操作(加密/解密)将由一群人执行,则使用公钥执行该操作。这就是名称的来源。在这种情况下,使用哪一个并不重要。-1 GUI在加密方面不安全。许多实现都有确定性的部分,比如包含计算机的MAC地址。还需要互联网连接才能真正工作。