如何许可我的c#应用程序

时间:2012-01-18 09:21:42

标签: c# web-services licensing

  

可能重复:
  License for C# desktop application

我想在试用几天后让程序锁定,如果用户购买许可证,可以使用该程序几个月。

我不知道这样做的方法。一个想法是在安装程序时创建一个本地临时密钥,并在过去几天之后将其锁定(这里的问题是用户可以更改其计算机的日期和时间......该程序的原理将在线使用离线,所以我无法比较从我的服务器到计算机的日期。

另一件事是,如何制作许可证服务。我可以生成大量的串行密钥,然后当用户付费时,我可以给他一个序列号,每次程序启动时我都可以检查序列是否在我的网络服务中。

我在一条好路上吗?有什么建议吗?

2 个答案:

答案 0 :(得分:1)

虽然它高度依赖于您的确切要求,目标技术(Winforms,WPF,Silverlight等......),但我建议您使用第三方许可组件,例如Quick License ManagerLicensing Pro dotNet

虽然滚动自己的解决方案会更便宜,但是它被破解或规避的可能性要高得多。使用第三方解决方案意味着您拥有一个外部团队或公司,致力于保持许可模式的安全性和可靠性。

致以最诚挚的问候,

答案 1 :(得分:1)

如果此应用程序是用C#编写的,并且您希望编写自己的许可功能,则首先需要在部署可执行文件之前对其进行模糊处理。这是为了阻止人们用反汇编程序读取你的CIL代码(存储在.exe中)。

要许可软件,您需要选择加密方法。对于这种加密,对称方法基本上等同于非对称方法(因为在任何情况下都必须提供密钥)。可以使用

选择加密方法
public enum EncryptionAlgorithm { Des = 1, Rc2, Rijndael, TripleDes }; 

对于每种方法及其细节,请参阅Wikipedia。 Rijndael加密算法旨在取代老化的DES算法。像DES一样,它是一个分组密码。它使用128位,192位或256位密钥,是一个不错的选择。在下文中,我将假设您不会将加密密钥存储在代码中(硬编码),而是将其提供给单独的文件(“产品密钥”);因此,您将提供两个许可证文件,即产品密钥以启用解密和加密的许可证文件。

一旦选择了加密方法,就可以使用哈希或算法来处理产品密钥/初始化向量(IV);你拿一个128位密钥(例如)并使用某种方法/变换加扰它。然后使用密钥(对于将软件部署到的每个用户随机/伪随机生成)来生成IV。

然后使用“随机”键,IV和选定的加密方法加密某些许可证文本(包括许可证日期)。

internal ICryptoTransform GetCryptoServiceProvider(byte[] bK, byte[] iVec){ ... }

要使用您的方法解密文件,您基本上执行相反的过程。有关许可的一点需要注意的是,您不应该花太多时间来担心人们破解软件。使用上面这样的方法很难,但不要投入太多时间来制定一个越来越复杂的方法,因为如果一些(不可否​​认的是非常有才华的)黑客想破解你的代码,很可能他会。此外,您必须假设用户不会违反法律并共享许可证文件!我无法评论使用外部公司运行代码许可的经验(我总是自己编写代码),但这可能是一个昂贵的选择。

我希望这会有所帮助。