24

我想分发一个应用程序,但有他们可以输入解锁的许可证密钥。什么是创建简洁密钥的好算法,该密钥包含有关他们购买的版本的信息,以及许可证期限等其他内容。

我意识到这种保护可以被破解,但它让诚实的人保持诚实。我可能会也可能不会实现在线激活,但我主要关心生成这些密钥的好方法。

这种情况我们都见过,什么算法效果最好?我应该询问用户的明文名称并使用它根据他们自己的信息创建唯一的产品密钥吗?

是否有一个系统可以用来使生成有效密钥几乎不可能?

也许是公钥/私钥对加密情况,只有制造商拥有私钥,并且可以通过公钥验证数据,但无法劫持公钥以创建有效密钥。

由于这是一个产品密钥,如果它相当短,64 个字符或最多 128 个字符会很棒,但越短越好,32 或更少会很棒。

4

2 回答 2

10

你没有说你在哪个平台上,但这是 Microsoft .Net 中的一个:

.NET 真正简单的许可方案

此页面记录了一个非常简单的许可方案,您可以将其用于您的 .NET 应用程序。它旨在相当安全、易于实施和易于扩展。示例版本允许您提供其中嵌入了客户端名称的许可证文件,但您可以轻松扩展它以添加其他识别信息、机器绑定、到期日期等。

该方案利用了 Microsoft 的 RSA 库和 XML 签名。基本上,您将任何您想要的内容放入 XML 文档并签署该文档。然后您可以将该文件提供给您的客户,应用程序可以从该文件中读取许可信息。由于该文件是数字签名的,除非您释放您的私钥(您真的不应该这样做),否则许可证文件不能被篡改。

于 2009-06-18T22:48:50.463 回答
3

没有互联网访问和拍摄键

关于序列密钥大小,在短/人类可读密钥(不太安全)和长密钥或可能的许可证文件(更安全)之间进行权衡。

如果您想要简短且人类可读的密钥以允许您存储诸如到期日期和功能之类的内容,您可以将 SKGL 与 Software Protector 一起使用,它们都是开源的(https://help.cryptolens.io/faq/what-是-skgl)。

然而,缺点是他们很可能会使用对称加密和/或将密钥生成算法存储在应用程序中。这意味着最终用户可以尝试查找加密密钥和/或算法(请参阅http://www.codeproject.com/Articles/764610/Licensing-systems-in-NET)。

Internet 访问(或使用激活文件离线)

更好的选择是使用基于云的系统来跟踪所有许可证密钥并允许您随时修改它们。

如果您有基于 Web 的许可系统,您可以使密钥更短,并且不必在实际密钥中存储信息(大多数基于离线的系统都是这种情况)。

此外,您将能够支持更多的许可模式,例如基于订阅的模式。

解决方案是:

  • 自己构建这样的系统- 这将花费大量时间并分散您对应用程序核心功能的注意力。

  • 使用现有的开源系统作为起点- 虽然它可能很诱人,因为它是开源且免费的,但将它们带到云端 + 将其配置为您的特定需求 + 维护它需要时间。我观察到的开源系统往往功能非常广泛,这导致了复杂性。

  • 外包给第三方——缺点是大部分都不是免费的。

在我看来,整个过程应该外包给专门开发该特定组件的第三方。扩展后,您可能需要更改许可逻辑。第三方可能已经支持这种方案,而不是自己开发。

有几种解决方案(确保寻找基于网络的解决方案),Cryptolens就是一个例子。如果您正在开发 .NET 应用程序,这里是一步一步的示例:https ://help.cryptolens.io/examples/key-verification 。


免责声明:我是 SKGL/Software Protector、关于许可系统的文章和 Cryptolens 的作者。

于 2016-07-26T19:17:24.973 回答