4

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

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

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

需要激活

  • 如果注册表中没有激活密钥,则会为他们提供激活页面
  • 他们将在这里输入激活密钥,他们将从我们这里收到
  • 当用户点击激活时,我得到他们的硬盘序列号并对其进行哈希处理
  • 然后我连接到一个我写过的网络服务来检查——密钥是否存在——是否有分配给它的 HDD 串行哈希——它是否处于活动状态
  • 如果它通过了所有这些标准,我会通过网络服务使用 HDD 序列更新我的数据库并将其标记为活动

已经激活(带有激活密钥的注册表项)

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

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

需要保护网络服务用户在启动程序时需要能够访问互联网,以便我可以检查网络服务

任何人都可以提供的任何建议将不胜感激。我在那里找不到任何答案。

4

2 回答 2

1

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

  • 必须使用 SSL 保护与 Web 服务的连接。
  • Web 服务之间的消息交换必须使用某种形式的私钥/公钥进行签名,以便客户端知道消息确实来自服务器,并且用户不会创建自己的激活服务器。
  • 您的 Web 服务必须在具有高可用性的服务器上(您不希望愤怒的用户因为无法完成工作而打电话)。
  • 可以更改硬盘序列号。你可能想把它和别的东西结合起来。
于 2013-10-18T01:13:13.283 回答
0

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

您的产品获得硬编码的公钥,而您发送到服务器的数据将使用 RSA 私钥加密发送回。通过这种方式,您可以防止他们使用自制的激活服务器,这些服务器只会说“一切正常,您已激活”。

于 2013-10-17T14:44:55.833 回答