我的Cocoa应用程序应该如何存储用户的许可证密钥?

时间:2009-12-25 06:57:01

标签: objective-c cocoa licensing

用户输入他/她的许可证密钥后,我的应用程序会使用该密钥激活自己(在线)。如何存储此激活状态和许可证密钥,以便下次用户打开应用程序时,应用程序将知道它已被激活?

5 个答案:

答案 0 :(得分:10)

Apple为这种要求提供了全面的设施。你想要的是Keychain API。

答案 1 :(得分:2)

我建议让密钥取决于用户特定的东西,例如电子邮件或全名,或者如果需要,可能是机器特定的ID。然后,您可以将其存储在NSUserDefaults或用户主目录中的一个名为的普通点文件中。这不需要加密它或做一些疯狂的混淆。会有海盗行为确定一下,我相信这是一个永远不会支付任何费用的人,所以你实际上并没有放松任何东西。通过使密钥依赖于特定于用户的东西,使用户更容易分享它。

关于盗版。你觉得他们能走多远?我做了一个小工具,没有付任何费用。但是作为那些想要支持创建它的人的一种享受,我添加了一个小功能来改变它的图形颜色只需5美元。嗯,他们做了什么?实际上有人反向设计了密钥,他们创建了一个密钥制造者。我承认我没有花费太多精力去混淆算法,但是嘿,我更专注于让所有真正优秀的用户输入比让任何破解者生活更难。我更高兴的是,他们认为我的小应用程序值得为逆向工程键修改工作。

链接:

答案 2 :(得分:2)

我刚刚在“〜/ Library / Application Support / MyApplication / License.myApplicationlicense”中编写了用户许可密钥并将电子邮件匹配到文件中。我认为这比使用NSUserDefaults更好,因为用户希望能够在不发生任何戏剧性事件的情况下抛弃他们的首选项,例如必须重新注册他们的应用程序。

该文件只是使用writeToFile编写的NSDictionary的内容:atomically:并使用dictionaryWithContentsOfFile读取:内容未加密,但这通常并不重要,具体取决于许可方案的工作方式。

如果你还没有这样做,我建议你看看AquaticPrime。我决定推出自己的许可方案,因为我想要许可证代码,而不是许可证文件。最后我觉得我会更好地坚持使用比我自己的许可方案更加加密的AquaticPrime。当我在测试期间使用AquaticPrime时,我将许可文件存储在上面提到的相同位置。

答案 3 :(得分:1)

我决定使用NSKeyedArchiver,因为它保持数据编码,因此手动访问和更改许可密钥和激活状态等敏感数据更加困难。

答案 4 :(得分:0)

您可以使用NSUserDefaults或您自己设计的系统。