我正在开发一款应用程序,希望有一天能够出售——宜早不宜迟!我想开发一个相当简单的序列号方案来保护它。
- 简单的数字/字母组合,长度不超过 25-30 个字母数字字符(例如 Microsoft 产品密钥)
- 不要求用户输入任何个人信息(例如电子邮件地址)作为验证的一部分
我一直(很少)思考这个问题,我认为公钥加密是一个很好的起点。我可以生成一个标识许可证的字符串(例如 SKU + 普通 ole' 完整序列号),对其进行散列、加密,然后将序列号 + 标识符编码为 25 位(左右)字母数字密钥。然后,应用程序会将密钥解码为序列号和“签名”,生成标识符哈希,使用相应的公钥解密“签名”,并将其与生成的标识符哈希进行比较。
本质上,产品密钥包含两部分数据:用户声称拥有的序列号以及程序可用于验证该声明的各种签名。我不知道 25 个字母数字字符(每个字符编码 5 位,实际总数为 120 位)是否足以满足所有这些需求。但是,它不必是加密安全的,只要代码不易被猜到即可。我可以接受短密钥长度和短哈希值。
就实现而言,该应用程序是用适用于 Mac OS X 的 Objective-C 编写的,但考虑到将代码注入 Cocoa 应用程序是多么容易,我可能会直接用 C 编写验证代码。
我不会使用任何强大的加密技术,因为无论如何你都必须在程序中解密它,从而使注册机或至少破解变得容易。
我会执行以下操作 - 取一个 25 位数字。现在添加一些规则,例如:
- 数字必须能被 31 整除
- 必须以最后一个字母开头和结尾
...
始终使用这些规则生成密钥。使用 20 条或更多规则(越多越好)。部署应用程序时,使用较少数量的规则,例如10 检查密钥是否有效。
然后这些规则将被反汇编并用于创建注册机。
每次更新时启用您以前未使用过的规则之一。如果规则选择正确,您将禁用注册机生成的大部分密钥。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)