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