如何为我的C#应用程序创建产品密钥?

如何为我的C#应用程序创建产品密钥?,c#,.net,license-key,C#,.net,License Key,如何为我的C#应用程序创建产品密钥 我需要创建每年更新的产品(或许可证)密钥。此外,我需要创建一个试用版 相关的: 诀窍是有一个只有你知道的算法(这样它可以在另一端被解码) 有一些简单的事情,比如“选择一个素数并在其中添加一个幻数” 更复杂的选项,例如对一组二进制数据(可能包括唯一标识符、版本号等)使用非对称加密,并将加密数据作为密钥分发 也可能值得阅读对的响应有一些工具和API可供使用。但是,我认为你不会免费找到一个;) 例如,OLicense套件: 您可以创建一条记录,其中包含要向应

如何为我的C#应用程序创建产品密钥

我需要创建每年更新的产品(或许可证)密钥。此外,我需要创建一个试用版

相关的:


诀窍是有一个只有你知道的算法(这样它可以在另一端被解码)

有一些简单的事情,比如“选择一个素数并在其中添加一个幻数”

更复杂的选项,例如对一组二进制数据(可能包括唯一标识符、版本号等)使用非对称加密,并将加密数据作为密钥分发


也可能值得阅读对的响应

有一些工具和API可供使用。但是,我认为你不会免费找到一个;)

例如,OLicense套件:

您可以创建一条记录,其中包含要向应用程序验证的数据。这可能包括您想要的任何内容—例如,要启用的程序功能、到期日期、用户名称(如果您想将其绑定到用户)。然后使用固定密钥的加密算法对其进行加密或散列。然后在程序中验证它。分发许可证文件(在windows上)的一种方法是将其作为更新注册表的文件提供(用户无需键入该文件)

不过要小心错误的安全感——迟早会有人给你的程序打补丁,跳过检查,然后分发补丁版本。或者,他们会制定出一个通过所有检查并分发的密钥,或者追溯时钟,等等。不管你的计划有多复杂,你为此所做的任何事情最终都将是通过模糊的安全性,他们将始终能够做到这一点。即使他们做不到,也会有人发布被黑客攻击的版本。即使您提供了加密狗,也同样适用——如果有人愿意,他们也可以修补检查。对代码进行数字签名没有任何帮助,他们可以删除该签名,或者放弃该签名

通过使用技术防止程序在调试器中运行等,可以使问题稍微复杂一些,但即使这样也不是防弹的。所以你应该让它变得足够困难,让一个诚实的用户不会忘记付钱。同时要非常小心,不要让你的计划对付费用户造成干扰——与其让付费客户无法使用他们付费的内容,不如让一些盗版的副本出现

另一种选择是进行在线检查——只需向用户提供一个唯一的ID,并在线检查该ID应该具有哪些功能,并将其缓存一段时间。所有同样的警告都适用——人们可以绕过任何类似的事情

还要考虑与忘记钥匙的用户打交道所需的支持成本等

编辑:我只想补充一点,不要在这方面投入太多时间,或者认为你复杂的计划会有所不同,无法破解。只要人们控制你的程序运行的硬件和操作系统,它就不会,也不可能。开发人员一直在试图为此提出更复杂的方案,认为如果他们开发自己的系统,那么只有他们自己知道,因此“更安全”。但这实际上相当于试图建造一台永动机。:-)

你信任谁

我一直认为这个领域太关键了,不能信任第三方来管理应用程序的运行时安全性。一旦该组件在一个应用程序中被破解,它在所有应用程序中都会被破解。几年前,当他们使用第三方许可证解决方案时,五分钟内就发生了这种情况。。。好时光

严重的,考虑滚动你自己的完全控制你的算法。如果你这样做,考虑使用你的关键字中的组件:
  • 许可证名称-您正在授权的客户端(如果有)的名称。对管理公司部署非常有用-在您提供给他们的许可证信息中使用“个性化”名称,让他们感觉特别
  • 许可证到期日
  • 在同一许可证下运行的用户数。这假设您有一种方法可以通过服务器跟踪站点上运行的实例
  • 功能部件代码-允许您跨多个功能部件和多个产品使用相同的许可证系统。当然,如果一种产品有裂纹,那么所有产品都有裂纹
然后对它们进行校验和,并添加任何您想要的(可逆)加密,以使其更难破解

要制作试用许可证密钥,只需为上述值设置值,并将其转换为“试用模式”

,因为这可能是您的应用程序/公司中最重要的代码,除了混淆之外,还可以考虑将解密例程置于本地DLL文件中,并简单地将其删除。
我工作过的几家公司都采用了通用的方法,并取得了巨大成功。或者这些产品不值得一试;)

无论它是琐碎的还是难以破解的,我不确定它是否真的有多大区别

你的应用程序被破解的可能性与其有用性成正比,而与产品密钥处理的强度成正比


我个人认为有两类用户。那些付钱的人。那些没有的人。即使是最微不足道的保护措施,也有可能做到这一点。那些不这样做的人会等待机会或者去别处看看。不管怎样,它都不会给你带来更多的钱。

如果你问的是你可以输入的密钥,比如Windows产品密钥,那么它们是基于一些检查的。如果您谈论的是必须复制粘贴的密钥,那么它们基于数字签名(私钥加密)

一个简单的产品密钥逻辑可以从产品密钥
getKey = System.Guid.NewGuid().ToString().Substring(0, 8).ToUpper(); //Will generate a random 8 digit hexadecimal string.

_key = Convert.ToString(Regex.Replace(getKey, ".{4}", "$0/")); // And use this to separate every four digits with a "/".
var licenseKey = "GEBNC-WZZJD-VJIHG-GCMVD";
var RSAPubKey = "{enter the RSA Public key here}";

var auth = "{access token with permission to access the activate method}";
var result = Key.Activate(token: auth, parameters: new ActivateModel()
{
    Key = licenseKey,
    ProductId = 3349,
    Sign = true,
    MachineCode = Helpers.GetMachineCode()
});

if (result == null || result.Result == ResultType.Error ||
    !result.LicenseKey.HasValidSignature(RSAPubKey).IsValid())
{
    // an error occurred or the key is invalid or it cannot be activated
    // (eg. the limit of activated devices was achieved)
    Console.WriteLine("The license does not work.");
}
else
{
    // everything went fine if we are here!
    Console.WriteLine("The license is valid!");
}

Console.ReadLine();