我怎么可以创建一个产品的按键对于我的C#应用程序?

我需要建立一个产品(或许可证)的关键,我更新一次。此外,我需要创建一个试验版本。

相关:

有帮助吗?

解决方案

你可以做一些事情,如创建一个记录,其中包含的数据要进行身份验证的应用程序。这可能包括任何你想要的-例如程序特征的启用、到期日期、姓名用户(如果您想要结合到一个用户)。然后进行加密是采用一些加密算法有固定关键的或散它。那么你只是确认它在你的节目。一种方式来分发的许可证文件(windows)是提供它作为一个文件,该文件更新注册表(保存户具有类型)。

提防虚假的安全感,虽然-迟早会有人简单地补你的程序,来跳过检查,并且分发修补版本。或者,他们将工作作出的一个关键,通过了所有的检查和分,或追溯的时钟,等等。不管多么令人费解的你让你的计划,任何你做的这最终将通过隐藏的安全和他们将始终能够到这一点。即使他们不可能有人会,并将分发的侵版本。同样甚至适用于如果提供一个狗-如果有人想到,他们可以修补了检查。数字签字,你的代码不会帮助,他们可以删除该签名,或者辞职。

你可以把事情搞复杂一点通过使用技术,以防止运行的程序在调试器等,但这是不防弹。所以你应该只是让人很难不够,一个诚实用户不会忘记支付。还要非常小心,你的计划不会成为阻碍支付的用户-这是最好有一些扯掉份比对于您的付费的用户不能使用什么他们支付的。

另一个选择是有一个在线检查只是用户提供一个独特的ID,并在网上查到什么能力ID应和缓存这一期间。所有的同事项适用虽然人们可以获得圆这样的事。

还要考虑支助费用的具有处理与用户有忘记他们的钥匙,等等。

编辑:我只想补充一点,不要投入太多时间在这个或者认为这在某种程度上你的错综复杂的方案会是不同的,无法破解的.它不会的,不能只要有人控制硬件和操作系统的程序。开发者已经试图想出与以往任何时候都更复杂的方案,为此,认为如果他们发展自己的系统,那么它将只知道他们因此更安全的'.但这真的是编程,相当于试图建立一个永动机。:-)

其他提示

你相信谁?

我总是认为这一领域也至关重要的信托第三方管理的运行安全的应用程序。一旦成分裂的一个应用程序,它是裂开的所有应用程序。它发生了 谨慎 五分钟后他们就有第三方许可证的解决方案 3d Max 几年前...美好时光!

说真的,考虑你自己具有完全控制你的算法。如果你这样做,考虑使用的组件在您的关键沿线:

  • 许可证的名字-名的客户(如果有的话)你许可。用于管理公司的部署--让他们感到特别要有一个"个性化"的名字在许可证中的信息源。
  • 日期的许可证到期
  • 用户数量下运行相同的许可证。这假定你有办法跟踪运行情况全网站、在服务器上下的方式
  • 特码-让你使用相同的授权系统在多个特征,并在多个产品。当然,如果它是裂开的一个产物,它是裂开的。

后来校验和了地狱,他们并添加任何(可逆)加密你想要它,使它更难以破解。

做一个试用许可证的关键,只有设定值为上述价值观转化为"审判模式"。

而且,由于这是现在最重要的码在应用程序/公司,上的/替代混淆考虑把解密程序在一个机DLL文件和简单的 P/调用 给它。

几家公司我的工作都采用了普遍办法,为此取得了巨大成功。或者,也许产品没有价值的裂;)

如果你问的关键,你可以的类型,如Windows产品键,那么它们是基于一些检查。如果你说的是钥匙,你有副本贴,那么它们都是基于数字的签名(私人钥匙加密的).

一个简单的产品的关键逻辑可以开始说的话,该产品的关键由四个5位数的群体,喜欢 abcde-fghij-kljmo-pqrst, 然后转到指定的内部关系等f+k+p应该平等,意味着第一位数字的2、3和4组中应总到一个.这意味着8xxxx-2xxxx-4xxxx-2xxxx是有效的,因此是8xxxx-1xxxx-0xxxx-7xxxx.当然,会有其他关系,包括复杂的关系一样,如果第二位数字的第一组数是奇数,然后最后一位数字的最后一集团应当奇怪。这种方式将有机产品键和核查产品的钥匙将只是简单地检查其是否符合所有规则。

加密通常是串的信息有关的许可证使用加密私人钥匙(==数字签名)和转换 Base64.公用钥匙被分发与应用程序。当Base64string达,它是核实(==密)通过公共密钥,并且如果发现有效的,该产品是激活。

无论是微不足道的或难以破解,我不知道,它真的让多大的差别。

可能的应用被破解是远远比它的有用性,而不是产品的强度的关键处理。

就个人而言,我认为有两种类别的用户。那些付出。那些不。那些做将有可能这样做甚至最微不足道的保护。那些不会等待一个裂缝或看看其他地方。无论哪种方式,它不会得到你更多的钱。

我不得不承认我做的东西而不是疯狂的。

  1. 找到一个CPU瓶颈和提取它 P/Invokeable DLL文件。
  2. 作为后建立的行动,进行加密的一部分DLL文件用XOR 加密钥匙。
  3. 选择一个公共/私钥方案,包括公钥在DLL文件
  4. 安排,以便解密的产品的关键和异或两个 半在一起的结果,在加密钥DLL。
  5. 在DLL的模块的状态码,禁止保护(PAGE_EXECUTE_READWRITE) 和解与的关键。
  6. 做一个LicenseCheck()方法,让一个完整性检查的 许可证,并参数,后来校验和整个DLL文件,扔 许可证的违反。哦,其他一些初始化 在这里。

当他们发现并去除LicenseCheck,有什么好玩的会遵循 当DLL开始 分割的错误.

还有就是选择 Microsoft软件许可证和保护 (呼)的服务。在阅读关于它,我真的很希望我能使用它。

我真的很喜欢这个想法阻挡部分代码的基础上的许可证。热的东西,而大多数安全。网。有趣阅读甚至如果你不用它!

Microsoft软件许可证和 保护(呼)的服务是一个 软件激活的服务, 使独立的软件供应商 (独立软件开发商)采用灵活的许可 条款为他们的客户。Microsoft 呼服务采用了一个独特的 保护的方法,有助于保护 你的申请和许可 信息让你得到 市场更快,同时增加 客户的遵守情况。

注:这是唯一的出路我会释放一个敏感产品代码(如有价值的算法)。

如果你想要一个简单的解决方案只是为了创建和验证序列号,试试 Ellipter.它使用椭圆曲线的加密和有一个"到期日"功能,这样你就可以创造审判verisons或时间限制的登记密钥。

另一个良好的廉价工具,用于键产品和活动是一个产品叫InstallKey.看看 www.lomacons.com

一个简单的方法是使用一个 全球唯一的标识符 (GUID)。Guid通常储存为128位数值和通常显示,为32十六位数字的团体分离的字符,例如 {21EC2020-3AEA-4069-A2DD-08002B30309D}.

使用下列中的代码C#通过 System.Guid.NewGuid().

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 "/".

我希望这有所帮助。

关键是要有一种算法,只有你知道(例如,它可以被解码在另一端)。

有简单的事情一样,"选择一个总理数量,并添加一个神奇的数字,它"

更令人费解的选择,例如使用非对称加密集的二进制数据(这可以包括一个独特的标识,版本数字,等等)和分发的加密数据作为关键。

也可能是值得一读的答复 这个问题 以及

还有一些工具和API适用于它。然而,我不认为你会找到一个免费;)

还有例如OLicense套房:http://www.olicense.de/index.php?lang=en

你可以检查 LicenseSpot.它提供:

  • 免费许可的成分
  • 网络激活
  • API集成应用程序以及网上商店
  • 序列号一代
  • 撤销许可证
  • 订购的管理

我会捎带一点上@frankodwyer是伟大的回答和挖深一点变成基于网络的许可。我是创始人 注册机, 一授权的其余API建的开发人员。

由于你所提到的想2"类型"的许可证申请,即一个"完整版本"和一个"试验版本",我们可以简化,并使用 功能许可证模型 在那里你的许可证具体特征的应用程序(在这种情况下,有一个"完全"功能和一个"试验"功能设置)。

要开始了,我们可以创建2 许可证的类型 (称为 政策 在注册机)和只要用户注册的一个账户可以产生一个"试验"许可证它们开始出("审判"的许可证 实现了 我们的"审理"要素政策),这可以用来做各种检查应用程序内的例如用户可以使用 审判-特征-审判-特征-B.

和建筑物上,只要用户 购买你的程序 (不论你用的PayPal、条,等等), 你可以产生一个许可证实施的"全面"的特征的政策,并将它与用户的 帐户.现在你的程序,你可以检查,如果用户有"充分"的许可证,可以做 亲的特征-X亲的特征-Y (通过这样做喜欢的东西 user.HasLicenseFor(FEATURE_POLICY_ID)).

我提到允许用户创建 用户账户—这是什么意思?我已经去到这个中细节 其他几个答案, ,而是一个简明扼要,为什么我认为这是一个卓越的方式进行身份验证和标识你的用户:

  1. 用户账户让你联想到 多个许可证多个机器 来一个 单个用户, 给你深入了解你的客户的行为 并促使他们为"在应用程序购买" 即采购你的"完整"的版本(种类的移动应用程序).
  2. 我们应该不需要我们的客户输入的长期许可证,这两者都是繁琐的,输入 和很难跟踪 即他们迷路很容易。(尝试在"失落的许可的关键"Twitter!)
  3. 客户 习惯使用电子邮件/密码;我认为我们应该做什么人都用于这样做,我们可以提供一个良好的用户经验(X).

当然,如果你不 处理用户账户和你 你的用户输入许可证,这是完全没问题(和注册机 支持这样做,以及).我只是提供另一种方式去处理这方面的授权,并希望提供一个很好的体验你的客户。

最后,因为你还说你想要更新这些许可证每年,可以设置一个 持续时间 在您的策略,以便"全部"的许可证到期之后一年的"试用"许可证最后说2周后,要求用户购买新许可证之后到期。

我可以挖掘更多,进入联机的用户,这样的事情,但我想我会试着保持这个回答简短和重点只是许可证的功能用户使用。

请查看这个回答: https://stackoverflow.com/a/38598174/1275924

想法是使用 Cryptolens 作为许可证的服务器。这里有一个 按步骤实例 (C#VB.NET).我还附上一段代码的关键核查下面(C#):

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();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top