language-agnostic - 开发简单的序列号生成器/验证器的好方法是什么?

标签 language-agnostic license-key

我正在开发一款应用程序,希望有一天能够出售——宜早不宜迟!我想开发一个相当简单的序列号方案来保护它。

  • 简单的数字/字母组合,长度不超过 25-30 个字母数字字符(例如 Microsoft 产品 key )
  • 不要求用户输入任何个人信息(例如电子邮件地址)作为验证的一部分

我一直在思考这个问题(很少),我认为公钥加密是一个很好的起点。我可以生成一个标识许可证的字符串(例如 SKU + 普通 ole' 完整序列号),对其进行散列、加密,然后将序列号 + 标识符编码为 25 位(左右)字母数字 key 。然后,应用程序会将 key 解码为序列号和“签名”,生成标识符哈希,使用相应的公钥解密“签名”,并将其与生成的标识符哈希进行比较。

本质上,产品 key 包含两部分数据:用户声称拥有的序列号以及程序可用于验证该声明的各种签名。我不知道 25 个字母数字字符(每个字符编码 5 位,实际总数为 120 位)是否足以满足所有这些需求。但是,它不必是加密安全的,只要代码不易被猜到即可。我可以接受较短的 key 长度和较短的哈希值。

就实现而言,该应用程序是用适用于 Mac OS X 的 Objective-C 编写的,但考虑到将代码注入(inject) Cocoa 应用程序是多么容易,我可能会直接用 C 编写验证代码。

最佳答案

我不会使用任何强大的加密技术,因为无论如何你都必须在程序中解密它,从而使注册机或至少破解变得容易。

我会执行以下操作 - 取一个 25 位数字。现在添加一些规则,例如: - 数字必须能被 31 整除 - 必须以最后一个字母开头和结尾 ...

始终使用这些规则生成 key 。使用 20 条或更多规则(越多越好)。部署应用程序时,使用较少数量的规则,例如10 检查 key 是否有效。 然后这些规则将被反汇编并用于创建注册机。

每次更新时启用您之前未使用过的规则之一。如果规则选择正确,您将禁用 keygens 生成的大部分 key 。

关于language-agnostic - 开发简单的序列号生成器/验证器的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/559163/

相关文章:

caching - 如何存储数百万个缓存,然后追踪 20 个最旧的缓存

python - 合并排序数组算法

javascript - Javascript事件什么时候执行?

java - 无法在项目 jraft 上执行目标 org.sonarsource.scanner.maven :sonar-maven-plugin:3. 3.0.603:sonar (default-cli):没有治理许可

c# - 从 C# win 窗体设置中的唯一机器 key 生成许可证 key

language-agnostic - 代码高尔夫 : Decision Tree

math - float 学有问题吗?

windows - 如何使用许可证 key 输入制作 Windows 安装程序包

rsa - 使用存储在应用程序二进制文件中的公钥进行软件许可证解密