我想在试用几天后让程序锁定,如果用户购买许可证,可以使用该程序几个月。
我不知道这样做的方法。一个想法是在安装程序时创建一个本地临时密钥,并在过去几天之后将其锁定(这里的问题是用户可以更改其计算机的日期和时间......该程序的原理将在线使用离线,所以我无法比较从我的服务器到计算机的日期。
另一件事是,如何制作许可证服务。我可以生成大量的串行密钥,然后当用户付费时,我可以给他一个序列号,每次程序启动时我都可以检查序列是否在我的网络服务中。
我在一条好路上吗?有什么建议吗?
答案 0 :(得分:1)
虽然它高度依赖于您的确切要求,目标技术(Winforms,WPF,Silverlight等......),但我建议您使用第三方许可组件,例如Quick License Manager,Licensing 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){ ... }
要使用您的方法解密文件,您基本上执行相反的过程。有关许可的一点需要注意的是,您不应该花太多时间来担心人们破解软件。使用上面这样的方法很难,但不要投入太多时间来制定一个越来越复杂的方法,因为如果一些(不可否认的是非常有才华的)黑客想破解你的代码,很可能他会。此外,您必须假设用户不会违反法律并共享许可证文件!我无法评论使用外部公司运行代码许可的经验(我总是自己编写代码),但这可能是一个昂贵的选择。
我希望这会有所帮助。