为了账号安全,请及时绑定邮箱和手机立即绑定

如何生成和验证软件许可证密钥?

如何生成和验证软件许可证密钥?

C#
暮色呼如 2019-08-23 14:55:13
如何生成和验证软件许可证密钥?我目前正在开发一种产品(用C#开发),可以免费下载和安装,但版本非常有限。要访问所有功能,用户必须支付许可费并获得密钥。然后将该密钥输入应用程序以“解锁”完整版本。因为使用像这样的许可证密钥,我想知道:通常如何解决?如何生成密钥以及如何通过应用程序验证密钥?我怎样才能避免让密钥在互联网上发布并被没有支付许可证的其他人使用(一个基本上不是“他们的”的密钥)。我想我也应该以某种方式将密钥绑定到应用程序的版本,这样就可以在功能版本中为新密钥收费。在这种情况下我还应该考虑其他什么吗?
查看完整描述

3 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

警告:你不能阻止用户盗版,但只能让诚实用户更容易做正确的事情。

假设您不想为每个用户进行特殊构建,那么:

  • 为自己生成产品的密钥

  • 取用户名

  • 使用(例如)SHA1连接用户名和密钥以及哈希

  • 将SHA1哈希解包为字母数字字符串。这是个人用户的“产品密钥”

  • 在程序中,执行相同的哈希,并与产品密钥进行比较。如果相等,那好吧。

但是,我再说一遍:这不会阻止盗版


我最近读到这种方法在加密方面不是非常合理。但是这个解决方案已经很弱了(因为软件本身必须在某个地方包含密钥),所以我不认为这个发现会使解决方案无效。

只是想我真的应该提到这个; 如果你打算从中获得其他东西,请注意。


查看完整回答
反对 回复 2019-08-23
?
慕沐林林

TA贡献2016条经验 获得超9个赞

我是Cryptolens软件许可平台背后的开发人员之一,自14岁起就开始从事许可系统工作。在这个答案中,我根据多年来积累的经验提供了一些技巧。

解决此问题的最佳方法是设置应用程序的每个实例将调用的许可证密钥服务器,以便验证许可证密钥。

许可证密钥服务器的好处

许可证密钥服务器的优点是:

  1. 您可以随时更新或阻止许可证密钥。

  2. 每个许可证密钥都可以锁定到特定数量的计算机(这有助于防止用户在线发布许可证密钥以供其他人使用)。

注意事项

虽然在线验证许可证可以让您更好地控制应用程序的每个实例,但并不总是存在互联网连接(特别是如果您的目标是大型企业),因此我们需要另一种方法来执行许可证密钥验证。

解决方案是始终使用公钥密码系统(如RSA或ECC)从服务器签署许可证密钥响应(如果计划在嵌入式系统上运行,可能会更好)。您的应用程序应该只有公钥来验证许可证密钥响应。

因此,如果没有互联网连接,您可以使用以前的许可证密钥响应。确保在响应中存储日期机器标识符,并检查它是否太旧(例如,您允许用户最多脱机30天等)以及许可证密钥响应属于正确的设备。

请注意,您应该始终检查许可证密钥响应证书,即使您已连接到互联网),以确保它自离开服务器后仍未更改(即使您的API仍然必须完成许可证密钥服务器使用https)

保护秘密算法

大多数.NET应用程序都可以很容易地进行逆向工程(Microsoft提供了一个用于获取IL代码的反汇编程序,而某些商业产品甚至可以在例如C#中检索源代码)。当然,您总是可以对代码进行模糊处理,但它永远不会100%安全。

在大多数情况下,任何软件许可解决方案的目的都是为了帮助诚实的人诚实(即,愿意支付的诚实用户不要忘记在试用期满后付费等)。

但是,您可能仍然有一些代码,您绝不想泄露给公众(例如,预测股票价格的算法等)。在这种情况下,唯一的方法是创建一个API端点,应用程序将在每次执行该方法时调用该端点。它需要互联网连接,但它确保您的密码永远不会被客户端机器执行。

履行

如果您不想自己实现所有内容,我建议您查看本教程Cryptolens的一部分)


查看完整回答
反对 回复 2019-08-23
  • 3 回答
  • 0 关注
  • 884 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信