【发布时间】:2010-10-08 05:35:39
【问题描述】:
我正在开发一款我想在某天销售的应用程序 - 越早越好!我想开发一个相当简单的序列号方案来保护它。
- 简单的数字/字母组合,长度不超过 25-30 个字母数字字符(想想 Microsoft 产品密钥)
- 不要求用户在验证过程中输入任何个人信息(如电子邮件地址)
我一直在考虑这个问题(很少),我认为公钥密码学是一个很好的起点。我可以生成一个标识许可证的字符串(如 SKU + 普通 ole' 整数序列号),对其进行散列、加密,并将序列号 + 标识符编码为 25 位(左右)字母数字密钥。然后,应用程序会将密钥解码为序列号和“签名”,生成标识符散列,使用相应的公钥解密“签名”并将其与生成的标识符散列进行比较。
基本上,产品密钥包含两个数据:用户声称拥有的序列号以及程序可用于验证该声明的各种签名。我不知道 25 个字母数字字符(每个编码 5 位,实际总共 120 位)是否足以满足所有这些要求。但是,它不必是加密安全的,只要代码不易被猜到就足够了。我可以接受短密钥长度和短哈希。
就实现而言,该应用是用 Objective-C 为 Mac OS X 编写的,但考虑到将代码注入 Cocoa 应用是多么容易,我可能会直接用 C 编写验证代码。
【问题讨论】:
标签: language-agnostic license-key