为了账号安全,请及时绑定邮箱和手机立即绑定

如何生成软件许可证密钥?

/ 猿问

如何生成软件许可证密钥?

幕布斯7119047 2020-02-03 14:15:49

许可证密钥是事实上的标准,可作为反盗版措施。坦白地说,这让我感到“ 通过隐秘获得安全性”,尽管我真的不知道如何生成许可证密钥。许可证密钥生成的一个好(安全)示例是什么?他们使用什么加密原语(如果有)?它是消息摘要吗?如果是这样,它们将对哪些数据进行哈希处理?开发人员采用什么方法使破解者难以构建自己的密钥生成器?密钥生成器是如何构成的?


查看完整描述

3 回答

?
慕函数4003404

对于老式CD密钥,只需要组成一种算法即可轻松生成和验证CD密钥(可以是任何字符串),但是有效CD密钥与无效CD的比率-keys太小,以至于随机猜测CD密钥不太可能使您有效。


方式不正确:

《星际争霸》和《半条命》都使用相同的校验和,其中第13位数字验证了前12位数字。因此,您可以在前12位数字中输入任何内容,然后猜测第13位数字(只有10种可能性),从而臭名昭著。1234-56789-1234


验证算法是公共的,看起来像这样:


x = 3;

for(int i = 0; i < 12; i++)

{

    x += (2 * x) ^ digit[i];

}

lastDigit = x % 10;

正确的方法

Windows XP吸收了大量信息,对其进行加密,然后将字母/数字编码贴在标签上。这样,MS既可以验证您的密钥,又可以同时获得产品类型(家庭,专业等)。此外,它需要在线激活。

完整算法相当复杂,但是在德国出版的这篇论文(完全合法!)中很好地概述了该算法。


当然,无论您做什么,除非您提供在线服务(例如World of Warcraft),否则任何形式的版权保护都只是一个停顿:不幸的是,如果这是有价值的游戏,那么有人会破产(或至少是规避) )的CD密钥算法以及所有其他版权保护。


真正正确的方法:

对于在线服务,生活要简单一些,因为即使使用二进制文件,您也需要通过其服务器进行身份验证才能使用它(例如,拥有一个WoW帐户)。例如,在购买游戏时间卡时使用的《魔兽世界》的CD密钥算法可能看起来像这样:


生成一个非常大的密码安全随机数。

将其存储在我们的数据库中并将其打印在卡上。


然后,当有人输入播放卡号时,请检查该号码是否在数据库中,如果是,则将该号码与当前用户相关联,以使其永远无法使用。

对于在线服务,没有理由不使用上述方案;使用其他任何东西都会导致问题。


查看完整回答
反对 回复 2020-02-03
?
ABOUTYOU

当我最初写此答案时,它是基于这样一个假设,即问题是关于许可证密钥的“脱机”验证。其他大多数答案都是针对在线验证的,在线验证明显更容易处理(大多数逻辑可以在服务器端完成)。


使用脱机验证,最困难的事情是确保您可以生成大量唯一的许可证密钥,并且仍然维护一个不容易受到破坏的强大算法(例如简单的校验位)


我对数学不是很精通,但是让我惊讶的是,做到这一点的一种方法是使用绘制图表的数学函数


绘制的线可以(如果使用足够好的频率)具有数千个唯一点,因此可以通过在该图上选择随机点并以某种方式编码值来生成关键点


在此处输入图片说明


例如,我们将绘制此图,选择四个点并将其编码为字符串“ 0,-500; 100,-300; 200,-100; 100,600”


我们将使用一个已知且固定的密钥(非常弱,但它有一定用途)对字符串进行加密,然后通过Base32转换结果字节以生成最终密钥


然后,应用程序可以逆转此过程(将base32转换为实数,解密,解码点),然后检查这些点是否在我们的秘密图中。


它的代码量很少,因此可以生成大量唯一有效的密钥


但是,由于晦涩难懂,因此非常安全。任何花时间分解代码的人都可以找到图形功能和加密密钥,然后模拟一个密钥生成器,但是它对于减缓偶然盗版可能很有用。


查看完整回答
反对 回复 2020-02-03
?
牛魔王的故事

查看有关部分密钥验证的文章,其中涉及以下要求:

  • 许可证密钥必须足够容易键入。

  • 如果发生退款或使用信用卡被盗的情况,我们必须能够将许可密钥列入黑名单(撤销)。

  • 无需“打电话回家”来测试按键。尽管这种做法正变得越来越普遍,但作为用户我还是不满意它,因此不会要求我的用户接受它。

  • 饼干应该不可能拆卸我们发布的应用程序并从中产生有效的“密钥生成器”。这意味着我们的应用程序将无法完全测试密钥以进行验证。仅其中一些钥匙需要测试。此外,该应用程序的每个发行版都应测试该键的不同部分,以使基于较早发行版的假音键无法在我们的软件的较新发行版上运行。

  • 重要提示:合法用户应该不可能偶然输入无效的密钥,该密钥似乎可以使用,但由于印刷错误而无法在以后的版本中使用。


查看完整回答
反对 回复 2020-02-03
  • 3 回答
  • 0 关注
  • 321 浏览
我要回答
慕课专栏
更多

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信