C# 对于使用web服务的串行密钥激活来说,这是一个好概念吗?

C# 对于使用web服务的串行密钥激活来说,这是一个好概念吗?,c#,web-services,activation,product-key,C#,Web Services,Activation,Product Key,我正在用WPF编写一个windows桌面应用程序。我需要加入一个激活过程,不知道我的想法是否正确 这就是我想实施的过程。这是最好的解决办法吗 当用户加载应用程序时,它会检查带有激活码的注册表项 需要激活 如果注册表中没有激活密钥,则会给它们一个激活页面 在这里,他们将输入他们将从我们那里收到的激活密钥 当用户单击activate时,我会获取他们硬盘的序列号并将其散列 然后我连接到一个Web服务,我已经写了检查 --钥匙存在吗 --是否为其分配了HDD串行哈希 --它是活动的吗 如果它通过了

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

这就是我想实施的过程。这是最好的解决办法吗

  • 当用户加载应用程序时,它会检查带有激活码的注册表项
需要激活

  • 如果注册表中没有激活密钥,则会给它们一个激活页面
  • 在这里,他们将输入他们将从我们那里收到的激活密钥
  • 当用户单击activate时,我会获取他们硬盘的序列号并将其散列
  • 然后我连接到一个Web服务,我已经写了检查 --钥匙存在吗 --是否为其分配了HDD串行哈希 --它是活动的吗
  • 如果它通过了所有这些标准,我将通过webservice使用HDD序列更新我的DB,并将其标记为活动
已激活(存在激活项的注册表项)

  • 获取他们硬盘的序列号并对其进行哈希运算
  • 从注册表中检索该项
  • 连接到webservice以检查密钥是否存在、是否仍处于活动状态以及是否已分配给正确的HDD哈希
  • 如果是,我允许用户继续
  • 如果没有,我将删除注册表项,并通知他们需要重新激活软件,然后加载激活页面
为了避免怀疑这是否是正确的方法,我还有一些额外的顾虑:

需要对Web服务进行安全保护 用户需要在启动程序时访问internet,以便我可以检查Web服务


任何人能提出的任何建议都将不胜感激。我找不到任何答案。

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

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

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

  • 必须使用SSL保护与Web服务的连接
  • web服务之间的消息交换必须使用某种形式的私钥/公钥进行签名,以便客户端知道消息确实来自服务器,而用户不创建自己的激活服务器
  • 您的Web服务必须位于具有高可用性的服务器上(您不希望愤怒的用户因为无法完成工作而呼叫)
  • 硬盘序列号可以更改。你可能想把它和其他东西结合起来