这是使用Web服务激活串行密钥的好概念吗?

时间:2013-10-17 12:45:09

标签: c# web-services activation product-key

我正在WPF中编写一个Windows桌面应用程序。我需要添加一个激活过程,并想知道我是否有正确的想法

这是我正在考虑实施的过程。这是否是最好的解决方案

  • 当用户加载应用程序时,它会检查其中包含激活码的注册表项

需要激活

  • 如果注册表中没有激活密钥,则会为其提供激活页面
  • 在这里,他们将输入他们将从我们这里收到的激活密钥
  • 当用户点击激活时,我会获取其硬盘的序列号并将其哈希
  • 然后我连接到我写的要检查的网络服务 - 密钥是否存在 - 是否有指定的HDD串行哈希值 - 它是否有效
  • 如果它通过了所有这些条件,我通过带有HDD序列的web服务更新我的数据库,并将其标记为活动

已经激活(存在激活密钥的注册表项)

  • 获取硬盘的序列号并将其哈希
  • 从注册表中检索密钥
  • 连接到网络服务以检查密钥是否存在,是否仍处于活动状态并分配给正确的硬盘散列
  • 如果是,我允许用户继续
  • 如果没有,那么我完全删除了注册表项,并通知他们需要重新激活该软件,然后加载激活页面。

除了想知道这是否是正确的方法之外,我还有一些额外的顾虑:

需要保护网络服务 用户只要在启动程序时就需要访问Internet,以便我可以检查Web服务

任何人都可以给予任何建议将不胜感激。我找不到任何答案。

2 个答案:

答案 0 :(得分:0)

到目前为止,您提出的概念很好,但由于您要求用户始终在线,我还会使用RSA对数据进行加密。

您的产品获取硬编码的公钥,并且您发送到服务器的数据将使用私有RSA密钥进行加密回送。  这样你就可以阻止他们使用自制的激活服务器,除了说“eveything is a okay,你被激活了”之外什么都不做。

答案 1 :(得分:0)

听起来不错,但你需要记住:

  • 必须使用SSL保护与Web服务的连接。
  • Web服务之间的消息交换必须使用某种形式的私钥/公钥进行签名,以便客户端知道消息确实来自服务器,用户不会创建自己的激活服务器。
  • 您的网络服务必须位于具有高可用性的服务器上(您不希望愤怒的用户打电话,因为他们无法完成工作)。
  • 可以更改HDD序列号。您可能希望将其与其他内容相结合。