如何为C#应用程序创建产品密钥?
我需要创建一个每年更新的产品(或许可证)密钥。另外,我需要为试用版创建一个。
有关: 如何最好地混淆我的C#产品许可证验证码? 基于Web的许可证激活 您如何保护软件免遭非法发行? NET应用程序的最佳激活密钥软件?
有关:
您可以执行类似创建记录的操作,其中包含要对应用程序进行身份验证的数据。这可以包括您想要的任何内容- 例如启用程序功能,有效期,用户名(如果您希望将其绑定到用户)。然后使用带有固定密钥的某种加密算法对其进行加密或对其进行哈希处理。然后,您只需在程序中进行验证即可。分发许可证文件(在Windows上)的一种方法是将其提供为更新注册表的文件(省去了用户键入文件)。
但是要小心错误的安全感- 迟早有人会简单地修补您的程序以跳过该检查,并分发修补的版本。或者,他们将制定出可以通过所有检查并分发该密钥或使时钟回溯日期的密钥。无论您如何制定计划,无论您做多复杂,最终所做的任何事情都将是安全性,并且会变得晦涩难懂能够做到这一点。即使他们不会有人愿意,也将分发被黑客入侵的版本。即使您提供了加密狗,也同样适用- 如果有人愿意,他们也可以为此签出支票。对您的代码进行数字签名无济于事,他们可以删除该签名,也可以辞职。
通过使用防止程序在调试器等中运行的技术,您可以使事情复杂一些,但是即使这样也不是防弹的。因此,您应该使它变得足够困难,以至于诚实的用户不会忘记付款。同样要非常小心,您的方案不会对付费用户造成干扰- 与您的付费客户不能使用他们所支付的价格相比,复制一些副本要好得多。
另一种选择是进行在线检查-仅向用户提供唯一的ID,然后在线检查ID应该具有的功能,并将其缓存一段时间。但是,所有相同的警告也适用-人们可以绕开类似的东西。
还考虑一下必须与忘记密钥的用户打交道的支持成本等。
编辑:我只是想补充一点,不要在这个上花费太多时间,或者认为您的复杂方案将有所不同且难以破解。 只要人们能够控制您的程序运行的硬件和操作系统,它就不会,也不会。开发人员一直在尝试为此提出更复杂的方案,认为如果他们为此开发自己的系统,则只有他们知道它,因此“更加安全”。但这确实等同于尝试制造永动机的编程。:-)