C# 如何生成和验证软件许可证密钥?
我目前正在开发一个产品(用C#开发),可以免费下载和安装,但版本非常有限。要访问所有功能,用户必须支付许可费并获得密钥。然后将该钥匙输入应用程序,以“解锁”完整版本 由于使用这样的许可证密钥很常见,我想知道:C# 如何生成和验证软件许可证密钥?,c#,license-key,C#,License Key,我目前正在开发一个产品(用C#开发),可以免费下载和安装,但版本非常有限。要访问所有功能,用户必须支付许可费并获得密钥。然后将该钥匙输入应用程序,以“解锁”完整版本 由于使用这样的许可证密钥很常见,我想知道: 这通常是怎么解决的 我如何生成密钥以及应用程序如何验证密钥 我怎样才能避免密钥被发布在互联网上,并被其他没有支付许可证的人使用(一个基本上不是“他们”的密钥) 我想我也应该以某种方式将密钥绑定到应用程序的版本,这样就可以在功能版本中对新密钥收费 在这个场景中,我还应该考虑什么呢?我以前用过
您只能使用任何许可方案保护软件到一定程度 简单的答案-无论你使用什么方案,它都可能被破解 不要用防止黑客的系统来惩罚诚实的客户,因为不管怎样黑客都会破解它 一个简单的哈希代码绑定到他们的电子邮件或类似的可能就足够了。当人们需要重新安装或更新硬件时,基于硬件的ID总是成为一个问题 关于这个问题的好思路:
完成所有要求的操作的唯一方法是要求使用服务器进行internet访问和验证。应用程序需要使用密钥登录到服务器,然后您需要存储会话详细信息,如IP地址。这将防止钥匙在多台不同的机器上使用。这在应用程序的用户中通常不是很流行,除非这是一个非常昂贵和复杂的应用程序,否则它是不值得的
您可以只拥有应用程序的许可证密钥,然后检查客户端的密钥是否正确,但可以很容易地将此密钥分发给其他用户,并且使用反编译器可以生成新密钥。警告:您无法阻止用户盗版,但只能让诚实的用户更容易地做正确的事情 假设您不想为每个用户执行特殊构建,则:
- 为自己生成产品的密钥
- 取用户名
- 关联用户名和密钥,并使用(例如)SHA1进行散列
- 将SHA1散列解压为字母数字字符串。这是个人用户的“产品密钥”
- 在程序中,执行相同的哈希,并与产品密钥进行比较。如果相等,则可以
我最近读到,这种方法在密码学上并不十分可靠。但是这个解决方案已经很弱了(,因为软件本身必须在某处包含密钥),所以我不认为这个发现会使解决方案失效
不过我觉得我真的应该提一下这件事;如果您计划从中派生其他内容,请注意。生成密钥时,不要忘记将版本号和内部版本号连接到计算哈希的字符串。这样就不会有一把钥匙可以打开你曾经释放过的所有东西
当你发现一些钥匙或补丁漂浮在你会知道,你成功地使一些流行的东西,有人费心破解。高兴吧 我不知道你想要多详细 但是我相信.net可以访问硬盘序列号 您可以让程序向您发送该文件和其他文件(如nic的用户名和mac地址) 你根据这个计算出一个代码,然后通过电子邮件将密钥发回给他们
在他们拿到钥匙后,他们将阻止他们切换机器。除了已经说明的以外 由于中间语言的问题,.NET应用程序的任何使用本质上都是不可靠的。只要对.NET代码进行简单的反汇编,您的产品就可以向任何人开放。在这一点上,他们可以轻松绕过您的许可代码 您甚至不能再使用硬件值来创建密钥。虚拟机现在允许用户创建“许可”机器的映像,并在他们选择的任何平台上运行 如果是昂贵的软件,还有其他解决方案。如果不是,那就让随便的黑客觉得足够难了。并接受这样一个事实,即最终会有未经许可的复制品出现
如果您的产品比较复杂,那么固有的支持问题将为您创造一些保护。有许多方法可以生成许可证密钥,但真正安全的方法很少。这是一个遗憾,因为对于公司来说,许可证密钥的价值几乎与实际现金相同 理想情况下,您希望许可证密钥具有以下属性: