为只能使用一次的软件创建唯一密钥

时间:2012-08-10 11:30:35

标签: c# winforms

我已经创建了一个基于Windows的软件应用程序。很快我就会把它变为现实。意味着我的客户可以在从我的网站下载后使用它。另外要提到的是,我的软件只能使用我提供的密钥。最初它将是免费试用。

这里我生成35位数字密钥及其唯一密钥。意味着一旦用户请求我输入密钥并向我发送密钥,他/她就可以使用我的申请。但真正的问题来自于此。

我希望代码只能使用一次。

例如:如果用户下载了我的应用程序,他可以使用该密钥来使用我的应用程序,但其他任何人都无法使用相同的密钥。假设我的密钥是xxx,相同的代码xxx不适用于已下载我的应用程序的任何其他人。只是为了让软件只能由真正的用户使用。

我也经历了这个链接

http://social.msdn.microsoft.com/Forums/zh/winformssetup/thread/301913a0-ecf9-4095-8d66-a3f4baeea6eb

作者Danny Staten

我仍然没有达到我的要求。

首先,我想要获取正在注册下载我的应用程序的人的IP地址,并且基于此我可以限制我的密钥仅由其IP地址将存储在我的数据库中的人使用。但我认为这将是错误/不必要的过程。并且为了使用我的应用程序,每次都应该插入人员网络电缆。但它无法解决我的目的。

其次我想到创建一个应用程序ping到我的服务器或我的过程。

最初,当用户运行应用程序(在线或离线)时,应用程序应该可以正常工作,但只要他将网络电缆/插头连接到网络,就应该向我的服务器或我提供警报。在我身边,我可以检查用户是否正在使用我提供给他的密钥。如果用户不是正版,我应该能够阻止他再使用我的应用程序。在我身边,我决定将密钥存储在数据库中,这些密钥是由我提供的。每个请求的密钥在另一个表中。我不确定我是否正确。但到目前为止,这是我想到的事情。

但总而言之,我最终希望只有一个用户才能使用密钥。只是为了避免一百万不同的用户使用我的应用程序使用一个密钥。

我不确定我提供过什么。

现在我有办法实现这个目标吗?

2 个答案:

答案 0 :(得分:3)

获取他的机器的硬件指纹并基于此生成密钥。您的软件应检查是否为该特定计算机生成了密钥。 但是,这需要在线激活您的软件。你可以用两种方式做到这一点

  • 让用户启动未激活的应用程序并显示他发送给您的硬件指纹。然后返回他输入的激活密钥。
  • 您的应用程序自动连接到激活服务并发送指纹,接收激活密钥并存储

另一点是包含有关硬件的几个组件的信息,并允许用户更改一个或几个。例如。获取硬盘序列号,MAC地址,主板SN,某些CPU信息(例如姓氏)的指纹,您应该允许用户升级或添加另一个硬盘。

有关getting hardware information的主题。

答案 1 :(得分:0)

我认为你必须做出选择,关键系统越强大,对用户来说就越难。

IE:一个好的系统是生成硬件密钥,因此它只会安装在已注册的计算机上。虽然它运行良好,但购买新计算机的用户可能会遇到要求您注册新硬件密钥的麻烦。

如果您只给他们一个密钥(如序列号),那么在另一台计算机上使用它可能很容易。

所以基本上,如果你不认为很多用户会放弃他们的密钥,因为软件不会被很多人使用,我就不会得到“超强”的硬件认证......

另外,不要注册IP地址,每个拥有动态IP的人都会讨厌这样做。